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 }
posted @ 2021-10-03 22:35  上官书房  阅读(49)  评论(0)    收藏  举报