10.3模拟赛




1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline ll re_ad() { 5 char ch=getchar(); ll x=0,f=1; 6 while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } 7 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 8 return x*f; 9 } 10 11 ll a,b,c,k,K; 12 ll Exgcd(ll a,ll b,ll &x,ll &y) { 13 if(!b) return x=1,y=0,a; 14 ll res=Exgcd(b,a%b,x,y); 15 ll tmp=x; x=y,y=tmp-(a/b)*y; 16 return res; 17 } 18 19 int main() 20 { 21 freopen("loop.in","r",stdin); 22 freopen("loop.out","w",stdout); 23 while(1) { 24 a=re_ad(),b=re_ad(),c=re_ad(),k=re_ad(); 25 K=1; for(ll i=1;i<=k;++i) K*=2; 26 if(!a&&!b&&!c&&!k) break; 27 ll x,y,tag=(b-a)%K; 28 ll d=Exgcd(c,K,x,y); 29 if(tag%d) { printf("FOREVER\n"); continue; } 30 tag/=d,K/=d; 31 printf("%lld\n",(tag*x%K+K)%K); 32 } 33 return 0; 34 }



1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const ll N=11; 5 ll n,p; 6 7 inline ll TuMulti(ll x,ll y) { ll res=0; for(;y;y>>=1,(x+=x)%=p) if(y&1) (res+=x)%=p; return res%p; } 8 struct Node { 9 ll a[N][N]; 10 Node Init(ll op) { 11 if(!op) memset(a,0,sizeof(a)); 12 else a[1][1]=a[1][3]=a[1][4]=a[2][2]=a[2][3]=a[2][4]=1,a[3][3]=a[4][4]=2; 13 } 14 Node operator * (Node B) { 15 Node res; res.Init(0); 16 for(ll i=1;i<=4;++i) for(ll j=1;j<=4;++j) for(ll k=1;k<=4;++k) 17 (res.a[i][j]+=TuMulti(a[i][k],B.a[k][j]))%=p; //,printf("%lld %lld %lld: %lld %lld\n",i,k,j,a[i][k],a[k][j]); 18 return res; 19 } 20 }g,lj; 21 inline ll QuickPow(ll x) { for(;x;x>>=1,g=g*g) if(x&1) lj=lj*g; } 22 23 int main() 24 { 25 freopen("beauty.in","r",stdin); 26 freopen("beauty.out","w",stdout); 27 while(scanf("%lld%lld",&n,&p)!=EOF) { 28 if(n==1) { printf("1\n"); continue; } 29 if(n==2) { printf("2\n"); continue; } 30 g.Init(1),lj.Init(1); 31 QuickPow(n-3); 32 ll ans=0; 33 for(ll i=1;i<=4;++i) (ans+=(lj.a[1][i]+lj.a[2][i])%p)%=p; 34 printf("%lld\n",ans); 35 // for(ll i=1;i<=4;++i) { for(ll j=1;j<=4;++j) printf("%lld ",lj.a[i][j]); puts(""); } 36 } 37 return 0; 38 }



1 #pragma GCC optimize(2) 2 3 #define FASTER 4 #ifdef FASTER 5 #pragma GCC diagnostic error "-std=c++11" 6 #pragma GCC optimize(2) 7 #pragma GCC optimize(3) 8 #pragma GCC optimize("Ofast") 9 #pragma GCC optimize("inline") 10 #pragma GCC optimize("-fgcse") 11 #pragma GCC optimize("-fgcse-lm") 12 #pragma GCC optimize("-fipa-sra") 13 #pragma GCC optimize("-ftree-pre") 14 #pragma GCC optimize("-ftree-vrp") 15 #pragma GCC optimize("-fpeephole2") 16 #pragma GCC optimize("-ffast-math") 17 #pragma GCC optimize("-fsched-spec") 18 #pragma GCC optimize("unroll-loops") 19 #pragma GCC optimize("-falign-jumps") 20 #pragma GCC optimize("-falign-loops") 21 #pragma GCC optimize("-falign-labels") 22 #pragma GCC optimize("-fdevirtualize") 23 #pragma GCC optimize("-fcaller-saves") 24 #pragma GCC optimize("-fcrossjumping") 25 #pragma GCC optimize("-fthread-jumps") 26 #pragma GCC optimize("-funroll-loops") 27 #pragma GCC optimize("-fwhole-program") 28 #pragma GCC optimize("-freorder-blocks") 29 #pragma GCC optimize("-fschedule-insns") 30 #pragma GCC optimize("inline-functions") 31 #pragma GCC optimize("-ftree-tail-merge") 32 #pragma GCC optimize("-fschedule-insns2") 33 #pragma GCC optimize("-fstrict-aliasing") 34 #pragma GCC optimize("-fstrict-overflow") 35 #pragma GCC optimize("-falign-functions") 36 #pragma GCC optimize("-fcse-skip-blocks") 37 #pragma GCC optimize("-fcse-follow-jumps") 38 #pragma GCC optimize("-fsched-interblock") 39 #pragma GCC optimize("-fpartial-inlining") 40 #pragma GCC optimize("no-stack-protector") 41 #pragma GCC optimize("-freorder-functions") 42 #pragma GCC optimize("-findirect-inlining") 43 #pragma GCC optimize("-fhoist-adjacent-loads") 44 #pragma GCC optimize("-frerun-cse-after-loop") 45 #pragma GCC optimize("inline-small-functions") 46 #pragma GCC optimize("-finline-small-functions") 47 #pragma GCC optimize("-ftree-switch-conversion") 48 #pragma GCC optimize("-foptimize-sibling-calls") 49 #pragma GCC optimize("-fexpensive-optimizations") 50 #pragma GCC optimize("-funsafe-loop-optimizations") 51 #pragma GCC optimize("inline-functions-called-once") 52 #pragma GCC optimize("-fdelete-null-pointer-checks") 53 #endif 54 55 #include<bits/stdc++.h> 56 #define int long long 57 using namespace std; 58 const int inf=9999999999999; 59 int A,B,dep,lj[10],ans[10]; 60 bool flag; 61 62 int gcd(int x,int y) { return !y?x:gcd(y,x%y); } 63 void dfs(int a,int b,int k) { 64 if(k==dep+1) return; 65 if(b%a==0 && b>a*lj[k-1]) { 66 lj[k]=b/a; 67 if(!flag || lj[k]<ans[k]) memcpy(ans,lj,sizeof(lj)); 68 flag=true; return ; 69 } 70 int s=b/a; if(s<=lj[k-1]) s=lj[k-1]+1; 71 int t=(dep-k+1)*b/a; if(t>inf/b) t=inf/b; 72 for(int i=s,G;i<=t;++i) { 73 lj[k]=i,G=gcd(a*i-b,b*i); 74 dfs((a*i-b)/G,(b*i)/G,k+1); 75 } 76 } 77 78 signed main() 79 { 80 freopen("history.in","r",stdin); 81 freopen("history.out","w",stdout); 82 scanf("%d%d",&A,&B); lj[0]=1; 83 for(dep=2;dep<=10;++dep) { 84 dfs(A,B,1); 85 if(!flag) continue; 86 for(int j=1;j<=dep;++j) printf("%d ",ans[j]); puts(""); 87 break; 88 } 89 return 0; 90 }



1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 inline ll re_ad() { 5 char ch=getchar(); ll x=0,f=1; 6 while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } 7 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 8 return x*f; 9 } 10 11 const ll N=1e3+11,mod=1e9; 12 ll n,m,a[N],b[N],pri[N]; 13 ll gcd(ll x,ll y) { return !y?x:gcd(y,x%y); } 14 15 int main() 16 { 17 freopen("home.in","r",stdin); 18 freopen("home.out","w",stdout); 19 n=re_ad(); 20 for(ll i=1;i<=n;++i) a[i]=re_ad(); 21 m=re_ad(); 22 for(ll i=1;i<=m;++i) b[i]=re_ad(); 23 ll ans=1; 24 bool flag=false; 25 for(ll i=1;i<=n;++i) for(ll j=1;j<=m;++j) { 26 ll g=gcd(a[i],b[j]); 27 ans=ans*g,a[i]/=g,b[j]/=g; 28 if(ans>mod) flag=true,ans%=mod; 29 } 30 if(!flag) printf("%lld\n",ans); 31 else { 32 for(ll i=1;i<=9;++i) pri[i]=ans%10,ans/=10; 33 for(ll i=9;i>=1;--i) printf("%lld",pri[i]); puts(""); 34 } 35 return 0; 36 }



1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int re_ad() { 4 char ch=getchar(); int x=0,f=1; 5 while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } 6 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 7 return x*f; 8 } 9 10 const int N=2e5+11,M=4e5+11,L=21; 11 int n,m; 12 int to[M],nxt[M],edge,head[N]; 13 int dep[N],gr[N][L]; 14 15 inline void addedge(int x,int y) { 16 ++edge,to[edge]=y,nxt[edge]=head[x],head[x]=edge; 17 ++edge,to[edge]=x,nxt[edge]=head[y],head[y]=edge; 18 } 19 20 void dfs(int d,int f) { 21 gr[d][0]=f,dep[d]=dep[f]+1; 22 for(int i=1;i<=20;++i) gr[d][i]=gr[gr[d][i-1]][i-1]; 23 for(int i=head[d];i;i=nxt[i]) if(to[i]!=f) dfs(to[i],d); 24 } 25 26 inline int LCA(int x,int y) { 27 if(dep[x]<dep[y]) x^=y^=x^=y; 28 for(int i=20;i>=0;--i) if(dep[gr[x][i]]>=dep[y]) x=gr[x][i]; 29 if(x==y) return x; 30 for(int i=20;i>=0;--i) if(gr[x][i]!=gr[y][i]) x=gr[x][i],y=gr[y][i]; 31 return gr[x][0]; 32 } 33 34 inline int Dist(int x,int y) { int lca=LCA(x,y); return dep[x]+dep[y]-dep[lca]*2; } 35 36 int main() 37 { 38 freopen("reaction.in","r",stdin); 39 freopen("reaction.out","w",stdout); 40 n=re_ad(),m=re_ad(); 41 for(int i=1,x,y;i<n;++i) x=re_ad(),y=re_ad(),addedge(x,y); 42 dfs(1,0); 43 for(int i=1,x,y;i<=m;++i) x=re_ad(),y=re_ad(),printf("%d\n",Dist(x,y)); 44 return 0; 45 }



1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 ll n,m,p,N,M; 5 inline ll QuickPow(ll x,ll y) { ll res=1; for(;y;y>>=1,(x*=x)%=p) if(y&1) (res*=x)%=p; return res; } 6 int main() 7 { 8 freopen("lucknum.in","r",stdin); 9 freopen("lucknum.out","w",stdout); 10 scanf("%lld%lld%lld",&n,&m,&p); 11 N=n+m-1,M=n; 12 ll ans=1,fac=1; 13 for(ll i=N;i>=N-M+1;--i) (ans*=i)%=p; 14 for(ll i=M;i>=1;--i) (fac*=i)%=p; 15 // printf("%lld %lld\n",ans,fac); 16 fac=QuickPow(fac,p-2); 17 printf("%lld\n",ans*fac%p); 18 return 0; 19 }



1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int re_ad() { 4 char ch=getchar(); int x=0,f=1; 5 while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); } 6 while('0'<=ch && ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 7 return x*f; 8 } 9 10 const int N=1e5+11,M=2e5+11; 11 int n,m; 12 int fr[M],to[M],nxt[M],edge,head[N]; 13 int dfn[N],low[N],tot,top,sta[N]; 14 int cnt,tag[N],mem[N]; 15 bool vis[M]; 16 17 inline void addedge(int x,int y) { 18 ++edge,fr[edge]=x,to[edge]=y,nxt[edge]=head[x],head[x]=edge; 19 } 20 21 void tarjan(int d,int ff) { 22 dfn[d]=low[d]=++tot,sta[++top]=d,vis[d]=true; 23 for(int i=head[d],u;i;i=nxt[i]) { 24 u=to[i]; 25 if(!dfn[u]) tarjan(u,d),low[d]=min(low[d],low[u]); 26 else if(vis[u]) low[d]=min(low[d],dfn[u]); 27 } 28 if(dfn[d]==low[d]) { 29 ++cnt; 30 while(sta[top]!=d) tag[sta[top]]=cnt,vis[sta[top]]=false,--top; 31 tag[d]=cnt,vis[d]=false,--top; 32 } 33 } 34 35 int main() 36 { 37 freopen("prom.in","r",stdin); 38 freopen("prom.out","w",stdout); 39 n=re_ad(),m=re_ad(); edge=1; 40 for(int i=1,x,y;i<=m;++i) x=re_ad(),y=re_ad(),addedge(x,y); 41 for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i,0); 42 for(int i=1;i<=n;++i) ++mem[tag[i]]; 43 int ans=0; 44 for(int i=1;i<=n;++i) if(mem[i]>1) ++ans; 45 printf("%d\n",ans); 46 return 0; 47 }

浙公网安备 33010602011771号