标签:ps ch NOI int cf read now 模拟
最后一个小时脑力大爆发,生生的把规律找出来了,还看出来几个错误的地方,我真是个天才啊哈哈哈哈
遗憾的是,第一题和第二题只会最最最最基础的暴力
但是猜第一题结论的时候属实是给我爽了一会......
T1 魔法球
其实二分是非常显然的,但是check的时候出现了一点点小问题
我一直都在想实际意义上的check,没有做出一点改动
于是就死在这里的,正解是直接判断给出的个数和能容下的个数的大小关系
AC_code
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fo(i,x,y) for(int i=(x);i<=(y);i++)
#define fu(i,x,y) for(int i=(x);i>=(y);i--)
int read(){
int s=0,t=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')t=-1;ch=getchar();}
while(isdigit(ch)){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
return s*t;
}
const int N=1e6+5;
int T,n,a[N];
int rp,it,sm;
bool jud(int md){
int sum=0;
fu(i,n-md,1){
sum+=a[i];
if(sum-(n-md-i+1)*md>(i-1)*(n-md-i+1))return false;
}
return true;
}
signed main(){
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
T=read();
while(T--){
n=read();
fo(i,1,n)a[i]=read();
sort(a+1,a+n+1);
int l=1,r=n,mid;
while(l<r){
mid=l+r>>1;
if(jud(mid))r=mid;
else l=mid+1;
}
printf("%d\n",l);
}
return 0;
}
T2 基因切割
考场上只想到了暴力KMP
可以根号分治一下,短串使用hash
还有一种做法,用26个bitset...
没写,懒了
T3 细菌培养
看出来了是个多项式,于是我就找规律去了...
AC_code
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fo(i,x,y) for(int i=(x);i<=(y);i++)
#define fu(i,x,y) for(int i=(x);i>=(y);i--)
int read(){
int s=0,t=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')t=-1;ch=getchar();}
while(isdigit(ch)){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
return s*t;
}
const int N=1e6+5;
const int mod=5;
int ksm(int x,int y,int mo){
int ret=1;
while(y){
if(y&1)ret=ret*x%mod;
x=x*x%mod;y>>=1;
}return ret;
}
int n,T,a[2][N],pw[N],cf[N];
signed main(){
freopen("bacteria.in","r",stdin);
freopen("bacteria.out","w",stdout);
n=read();T=read();
int now=0;bool flag=false;
fo(i,1,n){
a[now][i]=read()%mod;
if(a[now][i]==0){
// cerr<<"SB"<<endl;
if(T*2+1>=n){flag=true;}int ps;
ps=i-T%n;
if(ps<=0){
ps+=n;
cf[ps]++;cf[n+1]--;
cf[1]++;cf[i+1]--;
}
else cf[ps]++,cf[i+1]--;
ps=i+T%n;
if(ps>n){
ps-=n;
cf[1]++;cf[ps+1]--;
cf[i]++;cf[n+1]--;
}
else cf[i]++,cf[ps+1]--;
}
}
if(flag){
fo(i,1,n)printf("0 ");
return 0;
}
fo(i,1,n)cf[i]+=cf[i-1];
fo(i,1,60)if(T&(1ll<<i)){
now^=1;int ds=(1ll<<i-1)%n,ps;
fo(j,1,n){
a[now][j]=a[now^1][j]*a[now^1][j]*a[now^1][j]%mod;
ps=j-2*ds%n;if(ps<=0)ps+=n;a[now][j]=a[now][j]*a[now^1][ps]%mod;
ps=j-ds;if(ps<=0)ps+=n;a[now][j]=a[now][j]*a[now^1][ps]%mod*a[now^1][ps]%mod;
ps=j+2*ds%n;if(ps>n)ps-=n;a[now][j]=a[now][j]*a[now^1][ps]%mod;
ps=j+ds;if(ps>n)ps-=n;a[now][j]=a[now][j]*a[now^1][ps]%mod*a[now^1][ps]%mod;
}
}
if(T&1){now^=1;
// cerr<<"SB"<<endl;
fo(j,1,n){
a[now][j]=a[now^1][j];
if(j==1)a[now][j]=a[now][j]*a[now^1][n]%mod;
else a[now][j]=a[now][j]*a[now^1][j-1]%mod;
if(j==n)a[now][j]=a[now][j]*a[now^1][1]%mod;
else a[now][j]=a[now][j]*a[now^1][j+1]%mod;
}
}
fo(i,1,n){
if(cf[i])a[now][i]=0;
printf("%lld ",a[now][i]);
}
return 0;
}
标签:ps,ch,NOI,int,cf,read,now,模拟 来源: https://www.cnblogs.com/hzoi-fengwu/p/16240941.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。