11.3 NOIP模拟赛 (afternoon)
来源:互联网 发布:淘宝 价格趋势插件 编辑:程序博客网 时间:2024/06/06 06:52
思路:
ans.Len=lngn 取上整枚举所有的串 存起来排序然后挨着试2333333二进制hash 每个串用一个数表示然后就比较好搞了
代码:
#include<cstdio>unsigned int v[66000],p,z,i,l,n;char c;int main(){ for(l=1;l;l++){ for(p=0;p<=65536;p++)v[p]=0; freopen("ab.in","r",stdin); for(p=0,z=(1u<<l)-1,c=getchar();c>32;c=getchar(),++n){ p=((p<<1)|(c=='B'))&z;if(n+1>=l)v[p/32]|=1u<<(p%32); } for(p=0;p<(1<<l);p++)if(!(v[p/32]>>(p%32)&1)){ freopen("ab.out","w",stdout); for(i=l;i;i--) putchar('A'+(p>>(i-1)&1)); return putchar('\n'),0; } }}
思路:
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=5000000;bool pd[N+1];int p[N+1],c[N+1];int maxc(int x){ if(x<=N)return c[x]; int ans=x; for(int i=1;p[i]*p[i]<=x;i++) if(x%p[i]==0){while(x%p[i]==0)x/=p[i];ans=p[i];} return max(ans,x);}int get(int x,int y,int b){ if(x>y)return 0; if(b==0)return x==1; if(y<=p[b])return y-x+1; if(x==y)return maxc(x)<=p[b]; return get(x,y,b-1)+get((x-1)/p[b]+1,y/p[b],b);}int main(){ freopen("prime.in","r",stdin);freopen("prime.out","w",stdout); int n,m,b; scanf("%d%d%d",&b,&n,&m); c[1]=1; for(int i=2;i<=N;i++){ if(!pd[i])p[++p[0]]=i,c[i]=i; for(int j=1,t;(t=p[j]*i)<=N;j++){ pd[t]=1;c[t]=max(c[i],p[j]);if(i%p[j]==0)break; } } printf("%d\n",m-n+1-get(n,m,upper_bound(p+1,p+1+p[0],b)-p-1)); return 0;}
思路:
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define rep(i,x,y) for(i=x;i<=y;i++)#define _rep(i,x,y) for(i=x;i>=y;i--)#define mp make_pair#define fi first#define se second inline char getc(){char c;for(c=getchar();c<=32;c=getchar());return c;} template<class T> inline void read(T&x){bool fu=0;char c;for(c=getchar();c<=32;c=getchar());if(c=='-')fu=1,c=getchar();for(x=0;c>32;c=getchar())x=x*10+c-'0';if(fu)x=-x;}; template<class T> inline void read(T&x,T&y){read(x);read(y);}const int N=200010;const int Q=1000010;int t,q,n,m,x,y,z,i,j,k,p,ti,d1,d2,cnt;char c;int ki[Q],q0[Q],q1[Q];int edge,e[N],b[N],w[N],fir[N],dfn[N],d[N],r[N],h[N],lg2[N],p1[N],p2[N],l[N];pair<int,int> H[N][18];void add(int x,int y,int z){e[++edge]=y;w[edge]=z;b[edge]=fir[x];fir[x]=edge;}void dfs(int i){ h[++z]=i;r[i]=z; for(int k=fir[i];k;k=b[k]) d[e[k]]=d[i]+w[k],dfs(e[k]),h[++z]=i;}int getd(int x,int y){ if(r[x]>r[y])swap(x,y); #define u lg2[r[y]-r[x]+1] return d[x]+d[y]-2*d[min(H[r[x]][u],H[r[y]-(1<<u)+1][u]).se];}int main(){ freopen("factory2.in","r",stdin);freopen("factory2.out","w",stdout); read(t); rep(i,1,t){ c=getc(); if(c=='R'){read(x,y);++n;if(x)add(x,n,y);} else if(c=='C')++m; else{++q;read(q0[q],q1[q]);ki[q]=(c=='A');} } dfs(1); rep(i,2,(n<<1))lg2[i]=lg2[i/2]+1; _rep(i,(n<<1),1){ H[i][0]=mp(r[h[i]],h[i]); for(int j=1;i+(1<<j)-1<=(n<<1);j++) H[i][j]=min(H[i][j-1],H[i+(1<<(j-1))][j-1]); } rep(i,1,q) if(ki[i]) printf("%d\n",max(max(getd(p1[q0[i]],p1[q1[i]]),getd(p1[q0[i]],p2[q1[i]])), max(getd(p2[q0[i]],p1[q1[i]]),getd(p2[q0[i]],p2[q1[i]])))); else{ x=q0[i];y=q1[i]; if(!p1[x])p1[x]=p2[x]=y; else{ d1=getd(p1[x],y);d2=getd(p2[x],y); if(d1<d2)swap(d1,d2),swap(p1[x],p2[x]); if(d1>l[x])l[x]=d1,p2[x]=y; } } return 0;}
0 0
- 11.3 NOIP模拟赛 (afternoon)
- 10.29 NOIP模拟赛(afternoon)
- 10.30 NOIP模拟赛(afternoon)
- 10.31 NOIP模拟赛 (afternoon)
- 11.1 NOIP模拟赛 (afternoon)
- 11.2 NOIP模拟赛 (afternoon)
- 11.3 NOIP模拟赛 (morning)
- noip模拟11.3 T3
- noip模拟赛 双城记
- 【noip模拟赛】密码
- 10.10NOIP模拟赛
- 10.08NOIP模拟赛
- 10.11NOIP模拟赛
- 10.12NOIP模拟赛
- 10.13NOIP模拟赛
- 【NOIP模拟赛】小奇挖矿
- NOIP模拟赛--军训
- 【NOIP模拟赛】数列
- ConcurrentLinkedQueue的实现原理和源码分析
- hover不兼容处理方法
- PHP常量定义,define()和const区别
- HYSBZ 2243 染色
- 面试题整理
- 11.3 NOIP模拟赛 (afternoon)
- 跨域问题
- 11
- xcode使用技巧二:快捷键
- 五大布局-----FrameLayout帧布局
- 日本語:漢字氏名
- 教育类电影:《闻香识女人》
- Javascript深拷贝对象
- Opencv 中 Mat类的基本操作