CSP 模拟 3
1.CSP 模拟 02.CSP 模拟 13.CSP 模拟 2
4.CSP 模拟 3
5.CSP 模拟 46.CSP 模拟 57.CSP 模拟 68.CSP 模拟 79.CSP 模拟 810.CSP 模拟 911.CSP 模拟 1012.CSP 模拟 2413.CSP 模拟 2514.CSP 模拟 2615.CSP 模拟 2716.CSP 模拟 2817.CSP 模拟 2918.CSP 模拟 3019.CSP 模拟 3120.CSP 模拟 3221.CSP 模拟 3322.CSP 模拟 3423.CSP 模拟 3524.CSP 模拟 3625.CSP 模拟 3726.CSP 模拟 3827.CSP 模拟 3928.CSP 模拟 4029.CSP 模拟 4130.CSP 模拟 4231.CSP 模拟 4332.CSP 模拟 4433.CSP 模拟 4534.CSP 模拟 4635.CSP 模拟 4736.CSP 模拟 4837.CSP 模拟 4938.CSP 模拟 5039.CSP 模拟 5140.CSP 模拟 5241.CSP 模拟 5342.CSP 模拟 5443.NOIP 模拟 144.NOIP 模拟 245.NOIP 模拟 346.NOIP 模拟 447.NOIP 模拟 548.NOIP 模拟 649.NOIP 模拟 750.NOIP 模拟 851.NOIP2024(欢乐)加赛 352.NOIP 模拟 953.NOIP 模拟 1054.NOIP 模拟 1155.NOIP 模拟 1256.NOIP 模拟 1357.NOIP 模拟 1458.NOIP 模拟 1559.NOIP 模拟 1660.NOIP 模拟 17joke3579场,
T1 abc猜想 ([ARC111A] Simple Math 2)
直接
求
点击查看代码
#include<bits/stdc++.h> #define int long long typedef long long ll; typedef unsigned long long ull; inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;} const int N=1e4+10; const int MOD=1e9+7; std::vector<int> sth; inline int qpow(int a,int b,int mod){ int res=1; for(;b;b>>=1,a=a*a%mod)if(b&1)res=res*a%mod; return res; } bool vis[N]; signed main(){ // freopen("in.in","r",stdin);freopen("out.out","w",stdout); std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); int a=read(),b=read(),c=read(); int qc=c*c; int ans=qpow(a,b,qc); std::cout<<ans/c<<'\n'; }
T2 简单的排列最优化题 (CF819B Mister B and PR Shifts)
很容易的想到
定义一个位置的价值为
同时,答案可以借助这些价值从上一次的答案转移过来,即价值为非正整数的会对答案做出
此时只需要支持单点修改区间查询即可,树状数组是个不错的选择(其实再记一下其他东西可以
对于每次的右移,开个变量记录一下就行,对于末尾的点单独算。
点击查看代码
#include<bits/stdc++.h> #define int long long typedef long long ll; typedef unsigned long long ull; inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;} const int N=4e6+10; int t[N],len,n,a[N],last,ans=0,mink,minans; inline void add(int pos,int x){int zc=pos+1;for(;pos<=len;pos+=pos&-pos)t[pos]+=x;} inline int query(int l,int r){ int res=0; l--; for(;l;l-=l&-l)res-=t[l]; for(;r;r-=r&-r)res+=t[r]; return res; } inline int real(int x){return x+n+last;} signed main(){ // freopen("in.in","r",stdin);freopen("out.out","w",stdout); std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); n=read();len=n*4+1; for(int i=1;i<=n;++i){ a[i]=read(); add(real(a[i]-i),1);ans+=std::abs(a[i]-i); } mink=0,minans=ans; for(int i=1;i<=n-1;++i){ int en=a[n-i+1]; add(real(en-n),-1); ans+=-(std::abs(en-n))+en-1+query(1,real(0))-query(real(1),real(n-1)); if(minans>ans){minans=ans,mink=i;} last++; add(real(en-1),1); } std::cout<<minans<<' '<<mink<<'\n'; }
T3 简单的线性做法题 (P4062 [Code+#1] Yazid 的新生舞会)
感觉是妙妙题,有较多做法,甚至有线性。这里介绍树状数组处理三阶前缀和的做法。
考虑对每个数单独处理。设
简单观察发现,在两个相同数之间,它的
开三个树状数组分别维护一下就好了,具体看代码。
点击查看代码
#include<bits/stdc++.h> #define int long long typedef long long ll; typedef unsigned long long ull; inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;} const int N=1e6+10; int n,a[N],d[N],c,temp[N],ans,t1[N],t2[N],t3[N]; std::vector<int> p[N]; inline void add(int l,int r,int x){ if(l>r)return; l+=n+1,r+=n+1;r++; for(int i=l;i<=2*n+1;i+=i&-i)t1[i]+=x,t2[i]+=l*x,t3[i]+=(l*l-3*l)*x; for(int i=r;i<=2*n+1;i+=i&-i)t1[i]-=x,t2[i]-=r*x,t3[i]-=(r*r-3*r)*x; } inline int query(int l,int r){ if(l>r)return 0; int res1=0,res2=0; l+=n+1,r+=n+1;l--; for(int i=r;i;i-=i&-i)res1+=(((r+1)*(r+2))>>1)*t1[i]-r*t2[i]+t3[i]/2; for(int i=l;i;i-=i&-i)res2+=(((l+1)*(l+2))>>1)*t1[i]-l*t2[i]+t3[i]/2; return res1-res2; } inline void work(int x){ int num=0,last=0; for(int i:p[x]){ num++; int zc=num*2-i; int l=zc-1,r=zc-1+i-1-last; ans+=query(l-1,r-1); add(l,r,1); last=i; } int zc=num*2-n; int l=zc,r=l+n-last; ans+=query(l-1,r-1); num=0;last=0; for(int i:p[x]){ num++; int zc=num*2-i; int l=zc-1,r=zc-1+i-1-last; add(l,r,-1); last=i; } } signed main(){ // freopen("in.in","r",stdin);freopen("out.out","w",stdout); std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); n=read(); for(int i=1;i<=n;++i){temp[i]=a[i]=read();} std::sort(temp+1,temp+1+n); int len=std::unique(temp+1,temp+1+n)-temp-1; for(int i=1;i<=n;++i)a[i]=std::lower_bound(temp+1,temp+1+len,a[i])-temp,p[a[i]].push_back(i);; for(int i=1;i<=len;++i)work(i); std::cout<<ans<<'\n'; }
T4 简单的线段树题
原题 P4145 上帝造题的七分钟 2 / 花神游历各国
这题太典了,开方到
点击查看代码
#include<bits/stdc++.h> #define int long long typedef long long ll; typedef unsigned long long ull; inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;} const int N=1e6+10; int a[N],n,m; struct TREE{int num,sum;}t[N<<2]; inline void update(int p){ t[p].num=t[p<<1].num+t[p<<1|1].num; t[p].sum=t[p<<1].sum+t[p<<1|1].sum; } inline void build(int p,int l,int r){ if(l==r){t[p]={a[l]==1?1:0,a[l]};return;} int mid=l+r>>1; build(p<<1,l,mid);build(p<<1|1,mid+1,r); update(p); } inline void modi(int p,int l,int r,int x,int y){ if(l>=x&&r<=y){ if(t[p].num==r-l+1){return;} int mid=l+r>>1; if(l==r){t[p].sum=std::sqrt(t[p].sum);t[p].num=(t[p].sum==1?1:0);return;} if(t[p<<1].num<mid-l+1)modi(p<<1,l,mid,x,y); if(t[p<<1|1].num<r-mid)modi(p<<1|1,mid+1,r,x,y); update(p); return; } int mid=l+r>>1; if(x<=mid)modi(p<<1,l,mid,x,y); if(y>mid)modi(p<<1|1,mid+1,r,x,y); update(p); } inline int query(int p,int l,int r,int x,int y){ if(l>=x&&r<=y)return t[p].sum; int mid=l+r>>1,res=0; if(x<=mid)res+=query(p<<1,l,mid,x,y); if(y>mid)res+=query(p<<1|1,mid+1,r,x,y); return res; } signed main(){ // freopen("in.in","r",stdin);freopen("out.out","w",stdout); std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); n=read(); for(int i=1;i<=n;++i)a[i]=read(); build(1,1,n); m=read(); for(int i=1;i<=m;++i){ int op=read(),l=read(),r=read(); if(op){std::cout<<query(1,1,n,l,r)<<'\n';} else modi(1,1,n,l,r); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期