1. 首页
  2. 评测记录
  3. 公告
  1. 登录
  2. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文

2022tysc1985

UID: 10108, 注册于 2022-7-27 20:30:34, 最后登录于 2025-4-29 15:49:00, 最后活动于 2025-4-29 15:54:01.

解决了 641 道题目,RP: 274.87 (No. 30)

♂
  • 个人简介

    普及 & 普及+/提高- & 提高 部分模板

    dij

    #pragma GCC optimize("-fdelete-null-pointer-checks,inline-functions-called-once,-funsafe-loop-optimizations,-fexpensive-optimizations,-foptimize-sibling-calls,-ftree-switch-conversion,-finline-small-functions,inline-small-functions,-frerun-cse-after-loop,-fhoist-adjacent-loads,-findirect-inlining,-freorder-functions,no-stack-protector,-fpartial-inlining,-fsched-interblock,-fcse-follow-jumps,-fcse-skip-blocks,-falign-functions,-fstrict-overflow,-fstrict-aliasing,-fschedule-insns2,-ftree-tail-merge,inline-functions,-fschedule-insns,-freorder-blocks,-fwhole-program,-funroll-loops,-fthread-jumps,-fcrossjumping,-fcaller-saves,-fdevirtualize,-falign-labels,-falign-loops,-falign-jumps,unroll-loops,-fsched-spec,-ffast-math,Ofast,inline,-fgcse,-fgcse-lm,-fipa-sra,-ftree-pre,-ftree-vrp,-fpeephole2",3)
    #pragma GCC target("avx,sse2,sse3,sse4,mmx")
    #include <bits/stdc++.h>
    //万能头加火车头
    using namespace std;
    
    
    
    
    struct edge{
    	int v,w;
    	bool operator<(edge a)const{
    		return w>a.w;
    	}
    };
    const int MAXN=10001;
    int n,m,a,b,w,dis[MAXN],vis[MAXN];
    priority_queue <edge> q;
    vector<edge> v[MAXN];//存边vector
    void dij(int st){//dij yyds!!
    	memset(dis,127,sizeof dis);
    	dis[st]=0;
    	q.push((edge){st,0});
    	while(!q.empty()){
    		int f=(q.top()).v;
    		q.pop();
    		if(vis[f]) continue;
    		for(int i=0;i<v[f].size();i++){
    			edge g=v[f][i];
    			if(dis[f]+g.w<dis[g.v]){
    				dis[g.v]=dis[f]+g.w;
    				q.push((edge){g.v,dis[g.v]});
    			}
    		}
    		vis[f]=true;
    	}
    }
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=m;i++){
    		cin>>a>>b>>w;
    		v[a].push_back((edge){b,w});
    	}
    	dij(1);
    	cout<<dis[n];
    	return 0;
    }
    

    SPFA

    #pragma GCC optimize("-fdelete-null-pointer-checks,inline-functions-called-once,-funsafe-loop-optimizations,-fexpensive-optimizations,-foptimize-sibling-calls,-ftree-switch-conversion,-finline-small-functions,inline-small-functions,-frerun-cse-after-loop,-fhoist-adjacent-loads,-findirect-inlining,-freorder-functions,no-stack-protector,-fpartial-inlining,-fsched-interblock,-fcse-follow-jumps,-fcse-skip-blocks,-falign-functions,-fstrict-overflow,-fstrict-aliasing,-fschedule-insns2,-ftree-tail-merge,inline-functions,-fschedule-insns,-freorder-blocks,-fwhole-program,-funroll-loops,-fthread-jumps,-fcrossjumping,-fcaller-saves,-fdevirtualize,-falign-labels,-falign-loops,-falign-jumps,unroll-loops,-fsched-spec,-ffast-math,Ofast,inline,-fgcse,-fgcse-lm,-fipa-sra,-ftree-pre,-ftree-vrp,-fpeephole2",3)
    #pragma GCC target("avx,sse2,sse3,sse4,mmx")
    #include <iostream>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    using namespace std;
    struct edge{int to,num;};
    vector<edge> v[101];
    queue<int> q;
    const int inf=99999999;
    int n,m,st,en,a,b,k,dis[101],ans;
    bool book[101];
    void SPFA(int st){//关于SPFA,他已经死了
    	memset(dis,inf,sizeof dis);
    	dis[st]=0,book[st]=true;
    	q.push(st);
    	while(!q.empty()){
    		int f=q.front();
    		q.pop();
    		book[f]=false;
    		for(int i=0;i<v[f].size();i++){
    			if(dis[f]+v[f][i].num<dis[v[f][i].to]){
    				dis[v[f][i].to]=dis[f]+v[f][i].num;
    				if(!book[v[f][i].to]){
    					q.push(v[f][i].to);
    					book[v[f][i].to]=true;
    				}
    			}
    		}
    	}
    }
    void add(int a,int b,int k){
    	v[a].push_back((edge){b,k});
    }
    int main(){
    	cin>>n>>m>>st;
    	for(int i=1;i<=m;i++){
    		cin>>a>>b>>k;
    		add(a,b,k);
    	}
    	SPFA(st);
    	for(int i=1;i<=n;i++){
    		cout<<dis[i]<<" ";
    	}
    	return 0;
    }
    

    CRT&EXCRT

    #pragma GCC optimize(2)
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #define int long long
    using namespace std;
    
    int a[10007],m[10007],n,ans=0x3f3f3f3f3f3f3f3f;
    int str[30007][128];
    char cstr[128];
    int exgcd(int a,int b,int &x,int &y){
    	if(b==0){
    		x=1,y=0;
    		return a;
    	}
    	int g=exgcd(b,a%b,x,y);
    	int t=x;
    	x=y;
    	y=t-a/b*y;
    	return g;
    }
    int exCRT(){
    	int spe=a[1],lcm=m[1],e,f;
    	for(int i=2;i<=n;i++){
    		int ri=((a[i]-spe)%m[i]+m[i])%m[i];
    		int g=exgcd(lcm,m[i],e,f);
    		if(ri%g!=0) return 0x3f3f3f3f3f3f3f3f;
    		int z=(e*ri/g%(m[i])+(m[i]))%(m[i]);
    		spe=spe+z*lcm;
    		lcm=lcm/g*m[i];
    		spe=(spe%lcm+lcm)%lcm;
    	}
    	return spe;
    }
    char ch;
    int ptr;
    signed main(){
    	memset(str,-1,sizeof str);
    	scanf("%lld",&n);
    	getchar();
    	for(int i=1;i<=n;i++){
    		scanf("%s",cstr);
    		int le=strlen(cstr);
    		for(ptr=0;ptr<le;ptr++){
    			str[i][cstr[ptr]]=ptr;
    		}
    		m[i]=le;
    	}
    	//for(int i=1;i<=n;i++){
    		//for(char c=1;c<=126;c++){
    			//printf("%lld ",str[i][c]);
    		//}
    		//printf("\n");
    	//}
    	for(char c=1;c<=126;c++){
    		for(int i=1;i<=n;i++){
    			if(str[i][c]==-1) goto br;
    			a[i]=str[i][c];
    		}
    		//printf("I see U!\n");
    		//for(int i=1;i<=n;i++){
    			//printf("%lld+%lld ",a[i],m[i]);
    		//}
    		//printf("\n");
    		ans=min(ans,exCRT());
    		br:;
    	}
    	if(ans<0x3f3f3f3f3f3f) printf("%lld\n",ans+1);
    	else printf("-1\n");
    	return 0;
    }
    
    #pragma GCC optimize(2)
    #include <iostream>
    #include <queue>
    #include <cstdio>
    #define int long long
    using namespace std;
    
    int n,a[10007],m[10007],M=1,ans;
    int exgcd(int a,int b,int &x,int &y){
    	if(b==0){
    		x=1,y=0;
    		return a;
    	}
    	int d=exgcd(b,a%b,x,y);
    	int t=x;
    	x=y;
    	y=t-a/b*y;
    	return d;
    }
    signed main(){
    	scanf("%lld",&n);
    	for(int i=1;i<=n;i++){
    		scanf("%lld%lld",&m[i],&a[i]);
    		M=M*m[i];
    	}
    	for(int i=1;i<=n;i++){
    		int Mi=M/m[i];
    		int e,f;
    		int g=exgcd(Mi,m[i],e,f);
    		int Ti=((e/g)%(m[i]/g)+m[i]/g)%(m[i]/g);
    		ans=(ans+a[i]%M*Mi%M*Ti%M)%M;
    	}
    	printf("%lld",ans);
    	return 0;
    }
    

    Lucas(m less&p less)&exLucas

    #pragma GCC optimize(2)
    #include <iostream>
    #include <queue>
    #include <cstdio>
    #define int long long
    using namespace std;
    
    int t,fac[10009],inv[10009],ifac[10009];
    void init(int p){
    	fac[0]=fac[1]=inv[0]=inv[1]=ifac[0]=1;
    	for(int i=2;i<=p;i++){
    		fac[i]=fac[i-1]*i%p;
    		inv[i]=(p-p/i)*inv[p%i]%p;
    	}
    	for(int i=1;i<=p;i++){
    		ifac[i]=ifac[i-1]*inv[i]%p;
    	}
    	for(int i=0;i<=10;i++){
    		//printf("%lld,%lld,%lld\n",fac[i],ifac[i],inv[i]);
    	}
    	return;
    }
    int C(int n,int m,int p){
    	if(m>n) return 0;
    	return fac[n]*ifac[n-m]%p*ifac[m]%p;
    }
    int Lu_C(int n,int m,int p){
    	if(m==0) return 1;
    	return C(n%p,m%p,p)*Lu_C(n/p,m/p,p)%p;
    }
    int n,m,p;
    signed main(){
    	scanf("%lld",&t);
    	for(int i=1;i<=t;i++){
    		scanf("%lld%lld%lld",&n,&m,&p);
    		init(p);
    		printf("%lld\n",Lu_C(n+m,m,p));
    	}
    	return 0;
    }
    
    #pragma GCC optimize(2)
    #include <iostream>
    #include <queue>
    #include <cstdio>
    using namespace std;
    
    int qpow(int a,int b,int p){
    	int ans=1;
    	while(b){
    		if(b&1) ans=ans%p*a%p;
    		a=a%p*a%p;
    		b=b>>1;
    	}
    	return ans;
    }
    int C(int n,int m,int p){
    	if(m>n) return 0;
    	int u=1,d=1;
    	for(int i=1;i<=m;i++){
    		u=u*(n-i+1)%p;
    		d=d*i%p;
    	}
    	return u*qpow(d,p-2,p)%p;
    }
    int Lu_C(int n,int m,int p){
    	if(m==0) return 1;
    	return C(n%p,m%p,p)*Lu_C(n/p,m/p,p)%p;
    }
    int t,n,m,p;
    int main(){
    	scanf("%lld",&t);
    	for(int i=1;i<=t;i++){
    		scanf("%lld%lld%lld",&n,&m,&p);
    		printf("%lld\n",Lu_C(n,m,p));
    	}
    	return 0;
    }
    
    #pragma GCC optimize(2)
    #include <iostream>
    #include <queue>
    #include <cstdio>
    #define int long long
    using namespace std;
    int qpow(int a,int b,int p){
    	int ans=1;
    	while(b){
    		if(b&1) ans=ans%p*a%p;
    		a=a%p*a%p;
    		b=b>>1;
    	}
    	return ans;
    }
    int exgcd(int a,int b,int &x,int &y){
    	if(b==0){
    		x=1,y=0;
    		return a;
    	}
    	int d=exgcd(b,a%b,x,y);
    	int tmp=x;
    	x=y;
    	y=tmp-a/b*y;
    	return d;
    }
    int inv(int a,int p){//a^{-1}%p
    	int x,y;
    	exgcd(a,p,x,y);
    	return (x%p+p)%p;
    }
    int fac(int n,int und,int p){
    	if(n==0) return 1;
    	int pro=1,els=1;
    	for(int i=2;i<=p;i++) if(i%und) pro=pro*i%p;
    	for(int i=2;i<=n%p;i++) if(i%und) els=els*i%p;
    	return qpow(pro,n/p,p)%p*els%p*fac(n/und,und,p)%p;
    }
    int C(int n,int m,int und,int p){
    	if(m>n) return 0;
    	int a=fac(n,und,p),b=fac(m,und,p),c=fac(n-m,und,p),cnt=0;
    	for(int i=und;i<=n;i*=und) cnt+=n/i;
    	for(int i=und;i<=m;i*=und) cnt-=m/i;
    	for(int i=und;i<=n-m;i*=und) cnt-=(n-m)/i;
    	return a%p*inv(b,p)%p*inv(c,p)%p*qpow(und,cnt,p)%p;
    }
    int exLu_C(int n,int m,int p){
    	int tmp=p,sum=0;
    	for(int i=2;i*i<=tmp;i++){
    		if(tmp%i>0) continue;
    		int cnt=0,prod=1;
    		while(tmp%i==0){
    			tmp=tmp/i;
    			cnt++;
    			prod=prod*i;
    		}
    		int c=C(n,m,i,prod)%p;
    		//printf("%lld ",c);
    		sum=(sum%p+c*(p/prod)%p*inv(p/prod,prod)%p)%p;
    	}
    	if(tmp>1){
    		int c=C(n,m,tmp,tmp)%p;
    		///printf("%lld ",c);
    		sum=(sum%p+c*(p/tmp)%p*inv(p/tmp,tmp)%p)%p;
    	}
    	//printf("\n");
    	return sum;
    }
    int n,m,p;
    signed main(){
    	scanf("%lld%lld%lld",&n,&m,&p);
    	printf("%lld",exLu_C(n,m,p));
    	return 0;
    }
    

    并查集

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    
    using namespace std;
    const int maxn = 500521;
    int n,m,p;
    int mi;
    int mj;
    int pi;
    int pj;
    int f[maxn];
    inline int read(){
        int x=0;int f=1;char c=getchar();
        while(c<'0'||c>'9'){
            if(c=='-')f=-f;
            c=getchar();
        }
        while(c<='9'&&c>='0'){
            x=x*10+c-'0';
            c=getchar();
        }
        return x*f;
    } 
    int query(int x){
        if(x == f[x])return x;
        else return f[x] = query(f[x]);
    }
    void merge(int x,int y){
        int f1 = query(x);
        int f2 = query(y);
        if(f1 != f2){
            if(rand()%2)f[f1] = f2;
            else f[f2] = f1;
        }
        return;
    }
    int main(){
        n = read();
        m = read();
        p = read();
        for(int i=1;i<=n;i++)f[i] = i;
        for(int i=1;i<=m;i++){
            mi = read();
            mj = read();
            merge(mi,mj);
        }
        for(int i=1;i<=p;i++){
            pi = read();
            pj = read();
            if(query(pi) == query(pj)){
                printf("Yes\n");
            }
            else printf("No\n");
        }
        
        return 0;
    }
    

    tarjan强联通

    #pragma GCC optimize(2)
    #include <bits/stdc++.h>
    using namespace std;
    
    vector<int> g[10007];
    int low[10007],dfn[10007],vis[10007],cnt,csum,numc[10007],bnc[10007];
    stack<int> stk;
    int n,m,a,b,ans;
    
    void tarjan(int u){
    	int v;
    	dfn[u]=low[u]=++cnt;
    	stk.push(u);
    	vis[u]=true;
    	for(int i=0;i<(g[u].size());i++){
    		v=g[u][i];
    		if(dfn[v]==0){
    			tarjan(v);
    			low[u]=min(low[u],low[v]);
    		}else{
    			if(vis[v])
    				low[u]=min(low[u],dfn[v]);
    		}
    	}
    	if(dfn[u]==low[u]){//源点 
    		csum++;
    		do{//出栈 
    			numc[csum]++;
    			v=stk.top();
    			stk.pop();
    			bnc[v]=cnt;
    			vis[v]=false;
    		}while(u!=v);
    	}
    }
    
    void add(int a,int b){
    	g[a].push_back(b);
    }
    
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=m;i++){
    		cin>>a>>b;
    		add(a,b);
    	}
    	for(int i=1;i<=n;i++){
    		if(dfn[i]==0){
    			tarjan(i);
    		}
    	}
    	for(int i=1;i<=csum;i++){
    		if(numc[i]>1) ans++; 
    	}
    	cout<<ans;
    	return 0;
    }
    

    tarjan-割点,割边(桥)

    #include <iostream>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    vector<int> g[107];
    int dfn[107],low[107],root=1;
    bool vis[107];
    int n,m,a,b,cnt=0,f,x,ans;
    
    void tarjan(int u,int fa){
    	dfn[u]=low[u]=++cnt;
    	int child=0;
    	for(int i=0;i<g[u].size();i++){
    		int v=g[u][i];
    		if(dfn[v]==0){
    			child++;
    			tarjan(v,u);
    			low[u]=min(low[u],low[v]);
    			if(low[v]>=dfn[u]){
    				if(child>1||u!=1) vis[u]=true;
    			}
    		}else{
    			if(v!=fa){
    				low[u]=min(low[u],dfn[v]);
    			}
    	
    		}
    	}
    }
    
    int main(){
    	while(true){
    		memset(vis,false,sizeof vis);
    		memset(dfn,0,sizeof dfn);
    		memset(low,0,sizeof low);
    		cin>>n;
    		if(n==0) break;
    		for(int i=1;i<=n;i++){
    			g[i].clear();
    		}
    		while(true){
    			cin>>f;
    			if(f==0) break;
    			for(int i=1;i<n;i++){
    				cin>>x;
    				g[f].push_back(x);
    				g[x].push_back(f);
    				if(cin.get()=='\n') break;
    			}
    		}
    		cnt=ans=0;
    		tarjan(1,0);
    		for(int i=1;i<=n;i++) if(vis[i]) ans++;
    		cout<<ans<<endl;
    	}
    	
    }
    

    Kruskal

    #include <iostream>
    #include <algorithm>
    #include <iomanip>
    using namespace std;
    
    struct edge{int u,v;double w;}g[1000007];
    int n,m=1,cnt;
    int f[1000007];
    double s,ans;
    int getf(int x){
    	if(f[x]==x) return x;
    	return f[x]=getf(f[x]);
    }
    void init(){
    	for(int i=1;i<=n;i++){
    		f[i]=i;
    	}
    }
    bool cmp(edge a,edge b){
    	return a.w<b.w;
    }
    int main(){
    	cin>>s>>n;
    	init();
    	while(cin>>g[m].u>>g[m].v>>g[m].w) m++;
    	sort(g+1,g+m+1,cmp);
    	for(int i=1;i<=m;i++){
    		int x=getf(g[i].u);
    		int y=getf(g[i].v);
    		if(x==y) continue;
    		f[x]=y;
    		ans+=g[i].w;
    		cnt++;
    	}
    	if(ans<=s&&cnt==n-1) cout<<"Need "<<fixed<<setprecision(2)<<ans<<" miles of cable\n";
    	else cout<<"Impossible\n";
    	return 0;
    }
    

    树状数组

    #include <iostream>
    using namespace std;
    
    int n,m,b,l,r,tr[1000007];
    char ch;
    int lowbit(int x){return x&-x;}
    int ask(int a){
    	int ans=0;
    	while(a>0){
    		ans=ans+tr[a];
    		a=a-lowbit(a);
    	}
    	return ans;
    }
    void upd(int a,int x){
    	while(a<=n){
    		tr[a]=tr[a]+x;
    		a=a+lowbit(a);
    	}
    }
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=m;i++){
    		cin>>ch;
    		if(ch=='Q'){
    			cin>>b;
    			cout<<ask(b)<<endl;
    		}
    		if(ch=='C'){
    			cin>>l>>r;
    			upd(l,1);
    			upd(r+1,-1);
    		}
    	}
    	return 0;
    }
    

    线段树(区间查询,区间修改)

    #include <iostream>
    #define int long long
    #define func(a,b) a+b
    #define E 0
    using namespace std;
    
    struct node{
    	int lb,ub;
    	int data;
    	int tag;
    }tr[4*10000007];
    int n,m,p,x,y,s,d[10000007];
    void build(int k,int a,int b){
    	tr[k].lb=a;tr[k].ub=b;tr[k].tag=E;
    	if(a==b){
    		tr[k].data=d[a];
    		return;
    	}
    	int mid=tr[k].lb+tr[k].ub>>1;
    	build(k<<1,a,mid);
    	build(k<<1|1,mid+1,b);
    	tr[k].data=func(tr[k<<1].data,tr[k<<1|1].data);
    }
    void dtag(int k,int ls,int rs){
    	tr[k<<1].tag+=tr[k].tag;
    	tr[k<<1|1].tag+=tr[k].tag;
    	tr[k<<1].data+=tr[k].tag*(ls);
    	tr[k<<1|1].data+=tr[k].tag*(rs);
    	tr[k].tag=E;
    }
    void upd(int k,int x,int a,int b){
    	if(tr[k].lb>=a&&tr[k].ub<=b){
    		tr[k].data+=(tr[k].ub-tr[k].lb+1)*x;
    		tr[k].tag+=x;
    		return;
    	}
    	int mid=tr[k].lb+tr[k].ub>>1;
    	dtag(k,mid-tr[k].lb+1,tr[k].ub-mid);
    	if(a<=mid) upd(k<<1,x,a,b);
    	if(b>mid) upd(k<<1|1,x,a,b);
    	tr[k].data=func(tr[k<<1].data,tr[k<<1|1].data);
    }
    int query(int k,int a,int b){
    	if(tr[k].lb>=a&&tr[k].ub<=b){
    		return tr[k].data;
    	}
    	int mid=tr[k].lb+tr[k].ub>>1;
    	dtag(k,mid-tr[k].lb+1,tr[k].ub-mid);
    	int ans=E;
    	if(a<=mid) ans=func(ans,query(k<<1,a,b));
    	if(b>mid) ans=func(ans,query(k<<1|1,a,b));
    	return ans;
    }
    signed main(){
    	cin>>n;
    	cin>>m;
    	for(int i=1;i<=n;i++){
    		cin>>d[i];
    	}
    	build(1,1,n);
    	for(int i=1;i<=m;i++){
    		cin>>p>>x>>y;
    		if(p==1){
    			cin>>s;
    			upd(1,s,x,y);
    		}
    		if(p==2){
    			cout<<query(1,x,y)<<"\n";
    		}
    	}
    	return 0;
    }
    

    LCA(倍增法)

    #include <cstdio>
    #include <vector>
    #include <cmath>
    #define int long long
    using namespace std;
    
    int k=27;
    int n,m,x,y,root,f[40007][30],d[40007];
    vector<int> g[40007];
    void dfs(int u,int fa){
    	for(int i=0;i<g[u].size();i++){
    		int v=g[u][i];
    		if(v==fa) continue;
    		f[v][0]=u;
    		for(int j=1;j<=k;j++) f[v][j]=f[f[v][j-1]][j-1];
    		d[v]=d[u]+1;
    		dfs(v,u);
    	}
    }
    int lca(int x,int y){
    	if(d[x]<=d[y]) swap(x,y);
    	for(int i=k;i>=0;i--)
    		if(d[f[x][i]]>=d[y]) x=f[x][i];
    	if(x==y) return x;
    	for(int i=k;i>=0;i--)
    		if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
    	return f[x][0];
    }
    signed main(){
    	scanf("%lld",&n);
    	for(int i=1;i<=n;i++){
    		scanf("%lld%lld",&x,&y);
    		if(y==-1){
    			root=x;
    		}else{
    			g[x].push_back(y);
    			g[y].push_back(x);
    		}
    	}
    	d[root]=1;
    	dfs(root,0);
    	scanf("%lld",&m);
    	for(int i=1;i<=m;i++){
    		scanf("%lld%lld",&x,&y);
    		int a=lca(x,y);
    		if(a==x) printf("%lld\n",1);
    		else if(a==y) printf("%lld\n",2);
    		else printf("%lld\n",0);
     	}
    	return 0;
    }
    

    欧拉筛

    #include <cstdio>
    #include <cstring>
    #define int long long
    using namespace std;
    
    int n,m=0,p[10000007];
    bool v[10000007];
    void init(){
    	for(int i=2;i<=n;i++){
    		if(!v[i]){
    			m=m+1;
    			p[m]=i;
    		}
    		for(int j=1;j<=m;j++){
    			if(p[j]*i>n) break;
    			v[p[j]*i]=true;
    			if(i%p[j]==0) break;
    		}
    	}
    }
    signed main(){
    	scanf("%lld",&n);
    	memset(v,false,sizeof v);
    	init();
    	printf("%lld",m);
    	return 0;
    }
    

    欧拉函数

    #include <iostream>
    #define int long long
    using namespace std;
    
    int n,m,ans,phi,ans2;
    signed main(){
    	scanf("%lld",&n);
    	m=phi=n;
    	for(int i=2;i*i<=n;i++){
    		if(n%i==0){
    			phi=phi/i*(i-1);
    			while(n%i==0) n=n/i;
    		}
    	}
    	if(n>1) phi=phi/n*(n-1);
    	for(int i=1;i*i<=m;i++){
    		if(m%i==0){
    			ans++;
    			if(i*i!=m) ans++;
    		}
    	}
    	printf("%lld",m-phi-ans+1);
    	return 0;
    }
    

    exgcd

    #include <cstdio>
    #define int long long
    using namespace std;
    
    void swap(int &a,int &b){
    	int tmp=a;
    	a=b;
    	b=tmp;
    }
    int exgcd(int a,int b,int &x,int &y){
    	if(b==0){
    		x=1,y=0;
    		return a;
    	}
    	int d=exgcd(b,a%b,x,y);
    	int tmp=x;
    	x=y;
    	y=tmp-a/b*y;
    	return d;
    }
    int x,y,m,o,l,e,f,a,b,n;
    signed main(){
    	scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&o,&l);
    	a=o-m;
    	b=l;
    	n=x-y;
    	if(a<0) a=-a,n=-n;
    	int g=exgcd(a,b,e,f);
    	if(n%g!=0){
    		printf("Impossible\n");
    		return 0;
    	}
    	int z=b/g;
    	printf("%lld\n",(e*n/g%z+z)%z);
    }
    
    
    
  • 最近活动

    • 2024oiClass入门组周赛计划#18 IOI
    • 2024oiClass入门组周赛计划#17 IOI
    • 2024oiClass入门组周赛计划#16 IOI
    • 2024oiClass入门组周赛计划#15 IOI
    • 2024oiClass入门组周赛计划#14 IOI
    • 2024oiClass入门组周赛计划#13 IOI
    • 2024oiClass入门组周赛计划#12 IOI
    • 2024oiClass入门组周赛计划#11 IOI
    • 2024oiClass入门组周赛计划#10 IOI
    • 2024oiClass入门组周赛计划#09 IOI
    • 2024oiClass入门组周赛计划#08 IOI
    • 2024oiClass入门组周赛计划#07 IOI
    • 2024oiClass入门组周赛计划#06 IOI
    • 2024oiClass入门组周赛计划#05 IOI
    • 2024oiClass入门组周赛计划#04 IOI
    • 2024oiClass入门组周赛计划#03 IOI
    • 2024oiClass入门组周赛计划#02 IOI
    • 2024oiClass入门组周赛计划#01 IOI
    • 2024数信班摸底测试 IOI
    • 第五届oiClass信息学夏令营线上正式邀请赛3 OI
    • 第五届oiClass信息学夏令营线上正式邀请赛2 OI
    • 第五届oiClass信息学夏令营线上正式邀请赛1 OI
    • 2024暑假数据结构班Day15综合测试3补题 作业
    • 【2024暑假数据结构班】综合测试3 IOI
    • 2024暑假数据结构班Day14并查集 作业
    • 2024暑假数据结构班Day13树与字典树 作业
    • 2024暑假数据结构班Day11二叉树的遍历及性质 作业
    • 2024暑假数据结构班Day10综合测试2补题 作业
    • 【2024暑假数据结构班】综合测试2 OI
    • 2024暑假数据结构班Day9拓扑排序和欧拉图 作业
    • 2024暑假数据结构班Day8图的存储与遍历 作业
    • 2024暑假数据结构班Day7单调栈、倍增与ST表 作业
    • 2024暑假数据结构班Day6单调队列 作业
    • 2024暑假数据结构班Day5综合测试1补题 作业
    • 【2024暑假数据结构班】综合测试1 OI
    • 2024暑假数据结构班Day3STL容器 作业
    • 2024暑假数据结构班Day12二叉搜索树与二叉堆 作业
    • 2024暑假数据结构班Day2哈希表 作业
    • 2024暑假数据结构班Day1概述与基础 作业
    • 第五届oiClass信息学夏令营线上模拟测试1 OI
    • 第五届oiClass信息学夏令营day8作业-for循环专题练习2 作业
    • 第五届oiClass信息学夏令营day7作业-for循环专题练习1 作业
    • 第五届oiClass信息学夏令营线上模拟测试4 OI
    • 第五届oiClass信息学夏令营day21作业-二维数组和二维字符数组 作业
    • 第五届oiClass信息学夏令营day20作业-二维数组基础 作业
    • 第五届oiClass信息学夏令营day19作业-数组与递推算法 作业
    • 第五届oiClass信息学夏令营day18作业-普通排序和桶排序 作业
    • 第五届oiClass信息学夏令营day17作业-数组标记的应用 作业
    • 第五届oiClass信息学夏令营线上模拟测试3 OI
    • 第五届oiClass信息学夏令营day15作业-字符、字符数组和字符串 作业
    • 第五届oiClass信息学夏令营day14作业-一维数组基础 作业
    • 第五届oiClass信息学夏令营day13作业-循环专题练习 作业
    • 第五届oiClass信息学夏令营day12作业-多重循环 作业
    • 第五届oiClass信息学夏令营day11作业-while2 作业
    • 第五届oiClass信息学夏令营day10作业-while1 作业
    • 第五届oiClass信息学夏令营线上模拟测试2 OI
    • 第五届oiClass信息学夏令营day5作业-for语句2 作业
    • 第五届oiClass信息学夏令营day4作业-for语句1 作业
    • 第五届oiClass信息学夏令营day3作业-if语句 作业
    • 第五届oiClass信息学夏令营day2作业-表达式 作业
    • 第五届oiClass信息学夏令营day1作业-C++程序结构 作业
    • 2024春季线上班class14、动态规划的优化应用 作业
    • 2024春季线上班class13、差值动态规划的应用 作业
    • 2024春季线上班class12、多维动态规划的应用 作业
    • 摸底测试 IOI
    • 2024春季线上班class15-期末测试 OI
    • 2024春季线上班class11、动态规划的综合应用 作业
    • 2024春季线上班class10、倍增-ST算法 课后作业 作业
    • 2024春季线上班class10、倍增-ST算法 随堂练习 作业
    • 2024春季线上班class9、区间型动态规划2-区间合并 课后作业 作业
    • 2024春季线上班class9、区间型动态规划2-区间合并 随堂练习 作业
    • 【五一加码班】Day5补题 作业
    • 【五一加码班】Day4补题 作业
    • 【五一加码班】Day3补题 作业
    • 【五一加码班】Day2补题 作业
    • 【五一加码班】Day1补题 作业
    • 2024CSP加码班摸底测试(补题) 作业
    • 【五一加码班】Day3贪心、前缀和与差分 IOI
    • 2024春季线上班class8、区间型动态规划1-区间分割 课后作业 作业
    • 2024春季线上班class8、区间型动态规划1-区间分割 随堂练习 作业
    • 【五一加码班】Day1枚举、模拟与排序 IOI
    • 【五一加码班】Day5双指针与DP IOI
    • 【五一加码班】Day4简单数学、二分与队列栈 IOI
    • 【五一加码班】Day2字符串、搜索与二叉树 IOI
    • 【oiClass公益赛】2024CSP-J模拟赛#18「WZA Round #2」 OI
    • 2024春季线上班class7、背包型动态规划2课后作业 作业
    • 2024春季线上班class7、背包型动态规划2随堂练习 作业
    • 2024CSP加码班摸底测试 OI
    • 2024春季线上班class6、背包型动态规划1课后作业 作业
    • 2024春季线上班class6、背包型动态规划1随堂练习 作业
    • 【oiClass公益赛】2024CSP-J模拟赛#08 || For Riddles, For Wonders OI
    • 2024春季线上班class4、最长公共子序列课后作业 作业
    • 2024春季线上班class4、最长公共子序列随堂练习 作业
    • 【oiClass公益赛】2024CSP-J模拟赛#20 OI
    • 2024春季线上班class3、二维动规课后作业 作业
    • 2024春季线上班class3、二维动规随堂练习 作业
    • 【oiClass公益赛】2024CSP-J模拟赛#15 OI
    • 2024春季线上班class2、最长不下降子序列课后作业 作业
    • 2024春季线上班class2、最长不下降子序列随堂练习 作业
    • 【oiClass公益赛】2024CSP-J模拟赛#06 || LSZOI #01 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#17 OI
    • 【oiClass 公益赛】2024 CSP-J 模拟赛 #13 & XYZ Round 1 OI
    • 2024春季线上班class1、一维动规课后练习 作业
    • 2024春季线上班class1、一维动规随堂练习 作业
    • 【oiclass 公益赛】2024 CSP-J 模拟赛 #11 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#10 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#19 OI
    • 备用 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#14 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#09 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#07 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#16 OI
    • 【oiClass公益赛】2024 CSP-J 模拟赛 #04 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#03 OI
    • 【oiClass公益赛】2024CSP-J模拟赛 #05 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#02 OI
    • 【oiClass公益赛】2024CSP-J模拟赛#01 OI
    • 2024寒假算法加强班10构造专题 作业
    • 2024寒假算法加强班09课数学入门 作业
    • 2024寒假算法加强班08课双指针 作业
    • 2024寒假算法加强班07课二分 作业
    • 2024寒假算法加强班06课广度优先搜索 作业
    • 2024寒假算法加强班05课深度优先搜索 作业
    • 2024寒假算法加强班04课前缀和、差分 作业
    • 2024寒假算法加强班03课枚举 作业
    • 2024寒假算法加强班02课贪心算法 作业
    • 2024寒假算法加强班01课字符串模拟题 作业
    • 张晋嘉、倪穗霆杂题 作业
    • 2023年秋季营结营测试 OI
    • 2023年秋季营lesson15作业-深度优先搜索算法2 作业
    • 2023学年秋季班_模拟测试11 OI
    • 2023学年秋季班_模拟测试10 OI
    • 2023年秋季营lesson14作业-深度优先搜索算法1 作业
    • 2023年秋季营lesson13作业-递归算法2 作业
    • 2023学年秋季班_模拟测试09 OI
    • 2023学年秋季班_模拟测试08 OI
    • 2023年秋季营lesson12作业-递归算法1 作业
    • 2023年秋季营lesson11作业-阶段测试2(仅供改题) 作业
    • 2023年秋季营lesson10作业2-队 作业
    • 2023年秋季营lesson10作业1-栈 作业
    • 2023年秋季营阶段测试2 OI
    • 2023学年秋季班_模拟测试07 OI
    • 2023年秋季营lesson9作业2-差分前缀和 作业
    • 2023年秋季营lesson9作业1-递推算法 作业
    • 2023学年秋季班_模拟测试06 OI
    • 2023年秋季营lesson8作业-指针&贪心 作业
    • 2023学年秋季班_模拟测试05 OI
    • 2023年秋季营lesson7作业-位运算 作业
    • 2023年秋季营lesson6作业-进制转换 作业
    • 2023年秋季营lesson5作业-2023秋季营阶段测试1(仅供改题) 作业
    • 2023年秋季营阶段测试1 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#10 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#09 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#08 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#07 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#06 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#05 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#04 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#03 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#02 OI
    • 【oiClass公益赛】2023CSPJ模拟赛#01 OI
    • 2023学年秋季班_模拟测试04 OI
    • 2023年秋季营lesson4作业-排序&枚举 作业
    • 第五届oiClass信息学夏令营day22作业-结构体和函数 作业
    • 2023学年秋季班_模拟测试02 OI
    • 2023年秋季营lesson2作业-字符数组&字符串 作业
    • 2023学年秋季班_模拟测试01 OI
    • 2023年秋季营lesson1作业-二维数组 作业
    • 夏令营模拟测试-05 OI
    • 夏令营模拟测试-04 OI
    • 夏令营模拟测试-03 OI
    • 夏令营day18作业-一维数组3 作业
    • 2023年第四届oiClass夏令营线上选拔赛 OI
    • 夏令营day17作业-一维数组2 作业
    • 夏令营day16作业-一维数组1 作业
    • 夏令营第二周模拟测试 OI
    • 夏令营day12作业-多重循环 作业
    • 夏令营day11作业-while语句2 作业
    • 夏令营day10作业-while语句1 作业
    • 夏令营day9作业-for语句综合练习 作业
    • 第五届oiClass信息学夏令营day6作业-for语句3 作业
    • 夏令营第一周模拟测试 OI
    • 夏令营day5作业-for语句2 作业
    • 夏令营day4作业-for语句1 作业
    • 夏令营day3作业-if语句 作业
    • 夏令营day2作业-表达式 作业
    • 夏令营day1作业-C++程序结构 作业
  • Stat

  • Rating

1192
已递交
641
已通过
0
题解被赞

状态

  • 评测队列
  • 服务状态

开发

  • 开源
  • API

支持

  • 帮助
  • QQ 群
  1. 关于
  2. 联系我们
  3. 隐私
  4. 服务条款
  5. 版权申诉
  6. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  7. 兼容模式
  8. 主题
    1. 亮色
    2. 暗色
  1. 粤ICP备2024335011号
  2. Worker 0, 135ms
  3. Powered by Hydro v4.19.1 Community
关闭

登录

使用您的 oiClass 通用账户

忘记密码或者用户名?