zoukankan      html  css  js  c++  java
  • Codeforces Global Round 1

    竟然又没掉?

    A - Parity

    先判断基数是奇数还是偶数,如果是偶数,其奇偶性显然只与个位的奇偶性相关,否则与所有数位的数的和的奇偶性相关。

    #include<bits/stdc++.h>
    using namespace std;
    
    char gc() {
    //	static char buf[100000],*p1,*p2;
    //	return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin))?EOF:*p1++;
    	return getchar();
    }
    
    template<class T>
    int read(T &ans) {
    	T f=1;ans=0;
    	char ch=gc();
    	while(!isdigit(ch)) {
    		if(ch==EOF) return EOF;
    		if(ch=='-') f=-1;
    		ch=gc();
    	}
    	while(isdigit(ch))
    		ans=ans*10+ch-'0',ch=gc();
    	ans*=f;return 1;
    }
    
    template<class T1,class T2>
    int read(T1 &a,T2 &b) {
    	return read(a)==EOF?EOF:read(b);
    }
    
    template<class T1,class T2,class T3>
    int read(T1 &a,T2 &b,T3 &c) {
    	return read(a,b)==EOF?EOF:read(c);
    }
    
    typedef long long ll;
    const int Maxn=1100000;
    const int inf=0x3f3f3f3f;
    const ll mod=998244353;
    
    int b,k,a[Maxn];
    
    int main() {
    	read(b,k);
    	for(int i=1;i<=k;i++) read(a[i]);
    	if(b&1) {
    		int zhy=0;
    		for(int i=1;i<=k;i++) zhy+=a[i];
    		if(zhy&1) puts("odd");
    		else puts("even");
    	}
    	else
    		if(a[k]&1) puts("odd");
    		else puts("even");
    	return 0;
    }
    

    B - Tape

    贪心一下就好了,好像usaco上讲过的。

    #include<bits/stdc++.h>
    using namespace std;
    
    char gc() {
    //	static char buf[100000],*p1,*p2;
    //	return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin))?EOF:*p1++;
    	return getchar();
    }
    
    template<class T>
    int read(T &ans) {
    	T f=1;ans=0;
    	char ch=gc();
    	while(!isdigit(ch)) {
    		if(ch==EOF) return EOF;
    		if(ch=='-') f=-1;
    		ch=gc();
    	}
    	while(isdigit(ch))
    		ans=ans*10+ch-'0',ch=gc();
    	ans*=f;return 1;
    }
    
    template<class T1,class T2>
    int read(T1 &a,T2 &b) {
    	return read(a)==EOF?EOF:read(b);
    }
    
    template<class T1,class T2,class T3>
    int read(T1 &a,T2 &b,T3 &c) {
    	return read(a,b)==EOF?EOF:read(c);
    }
    
    typedef long long ll;
    const int Maxn=1100000;
    const int inf=0x3f3f3f3f;
    const ll mod=998244353;
    
    int n,m,k,a[Maxn];
    priority_queue<int,vector<int>,greater<int> > q;
    
    int main() {
    	read(n,m,k);
    	for(int i=1;i<=n;i++) read(a[i]);
    	for(int i=1;i<n;i++) q.push(a[i+1]-a[i]-1);
    	int ans=n;
    	n-=k;
    	while(n--) {
    		ans+=q.top();
    		q.pop();
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    

    C - Meaningless Operations

    首先观察样例,可以发现0与另一个数字的gcd就是另一个数字,那么如果这个数的位不满,就一定可以选出来一个数与他的&为0,而^为所有位满的数。

    如果满的话,可以发现异或就是减去这个数,而位与还是这个数,那么这个数如果就是那个数的约数,其gcd就是这个约数。那么就可以选择那个数的最大的约数即可。

    #include<bits/stdc++.h>
    using namespace std;
    
    char gc() {
    //	static char buf[100000],*p1,*p2;
    //	return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin))?EOF:*p1++;
    	return getchar();
    }
    
    template<class T>
    int read(T &ans) {
    	T f=1;ans=0;
    	char ch=gc();
    	while(!isdigit(ch)) {
    		if(ch==EOF) return EOF;
    		if(ch=='-') f=-1;
    		ch=gc();
    	}
    	while(isdigit(ch))
    		ans=ans*10+ch-'0',ch=gc();
    	ans*=f;return 1;
    }
    
    template<class T1,class T2>
    int read(T1 &a,T2 &b) {
    	return read(a)==EOF?EOF:read(b);
    }
    
    template<class T1,class T2,class T3>
    int read(T1 &a,T2 &b,T3 &c) {
    	return read(a,b)==EOF?EOF:read(c);
    }
    
    typedef long long ll;
    const int Maxn=1100000;
    const int inf=0x3f3f3f3f;
    const ll mod=998244353;
    
    int q,x;
    
    int main() {
    	read(q);
    	while(q--) {
    		read(x);
    		int sxz=1;
    		while(sxz<=x) sxz<<=1;
    		sxz--;
    		if(x==sxz) {
    			int flag=0;
    			for(int i=2;i*i<=sxz;i++)
    				if(sxz%i==0) {
    					flag=sxz/i;
    					break;
    				}
    			if(!flag) puts("1");
    			else printf("%d
    ",flag);
    		}
    		else printf("%d
    ",sxz);
    	}
    	return 0;
    }
    

    D - Jongmah

    很显然,如果是连着的三个超过了三个,那么一定就没有意义了,因为可以选三个相同的也能达到相同的效果,所以可以直接进行DP了。

    #include<bits/stdc++.h>
    using namespace std;
    
    char gc() {
    //	static char buf[100000],*p1,*p2;
    //	return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin))?EOF:*p1++;
    	return getchar();
    }
    
    template<class T>
    int read(T &ans) {
    	T f=1;ans=0;
    	char ch=gc();
    	while(!isdigit(ch)) {
    		if(ch==EOF) return EOF;
    		if(ch=='-') f=-1;
    		ch=gc();
    	}
    	while(isdigit(ch))
    		ans=ans*10+ch-'0',ch=gc();
    	ans*=f;return 1;
    }
    
    template<class T1,class T2>
    int read(T1 &a,T2 &b) {
    	return read(a)==EOF?EOF:read(b);
    }
    
    template<class T1,class T2,class T3>
    int read(T1 &a,T2 &b,T3 &c) {
    	return read(a,b)==EOF?EOF:read(c);
    }
    
    typedef long long ll;
    const int Maxn=1100000;
    const int inf=0x3f3f3f3f;
    const ll mod=998244353;
    
    int n,m,x,a[Maxn],f[Maxn][3][3];
    
    int main() {
    	read(n,m);
    	for(int i=1;i<=n;i++) {
    		read(x);
    		a[x]++;
    	}
    	for(int i=1;i<=m;i++) {
    		for(int j=0;j<3;j++)
    			for(int k=0;k<3;k++)
    				for(int l=0;l<3;l++) {
    					if(j+k+l>a[i]) continue;
    					f[i][k][l]=max(f[i][k][l],f[i-1][j][k]+l+(a[i]-j-k-l)/3);
    				}
    	}
    	printf("%d
    ",f[m][0][0]);
    	return 0;
    }
    

    E - Magic Stones

    先差分,然后发现操作的本质就是交换两个数,具体可以参考题解。

    #include<bits/stdc++.h>
    #define qmin(x,y) (x=min(x,y))
    #define qmax(x,y) (x=max(x,y))
    using namespace std;
    
    char gc() {
    //	static char buf[100000],*p1,*p2;
    //	return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin))?EOF:*p1++;
    	return getchar();
    }
    
    template<class T>
    int read(T &ans) {
    	T f=1;ans=0;
    	char ch=gc();
    	while(!isdigit(ch)) {
    		if(ch==EOF) return EOF;
    		if(ch=='-') f=-1;
    		ch=gc();
    	}
    	while(isdigit(ch))
    		ans=ans*10+ch-'0',ch=gc();
    	ans*=f;return 1;
    }
    
    template<class T1,class T2>
    int read(T1 &a,T2 &b) {
    	return read(a)==EOF?EOF:read(b);
    }
    
    template<class T1,class T2,class T3>
    int read(T1 &a,T2 &b,T3 &c) {
    	return read(a,b)==EOF?EOF:read(c);
    }
    
    typedef long long ll;
    const int Maxn=1100000;
    const int inf=0x3f3f3f3f;
    const ll mod=998244353;
    
    int n,a[Maxn],b[Maxn];
    
    int main() {
    	read(n);
    	for(int i=1;i<=n;i++) read(a[i]);
    	for(int i=1;i<=n;i++) read(b[i]);
    	if(a[1]!=b[1]||a[n]!=b[n]) {
    		puts("No");
    		return 0;
    	}
    	for(int i=1;i<n;i++) a[i]=a[i+1]-a[i],b[i]=b[i+1]-b[i];
    	sort(a+1,a+n),sort(b+1,b+n);
    	for(int i=1;i<n;i++) {
    		if(a[i]!=b[i]) {
    			puts("No");
    			return 0;
    		}
    	}
    	puts("Yes");
    	return 0;
    }
    
  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/shanxieng/p/10355918.html
Copyright © 2011-2022 走看看