2022/10/2(cf·CGR21)https://codeforces.com/contest/1696

https://codeforces.com/contest/1696/problem/A
//难搞,主要还是因为理解问题
//或操作,会将值变为大于等于该值的数,与操作会将值变为比它小于等于的值
//一次操作,取最大值进行或操作即为答案

#include
using namespace std;
#define int long long
int v[200005];

signed main()
{
	int tt;
	for(cin>>tt;tt--;)
	{
		int n,x,ans=-1;
		cin>>n>>x;
		for(int i=0;i<n;i++)
		{
			cin>>v[i];
			ans=max(ans,v[i]|x);
		}	
		cout<<ans<<'\n';
	}
}

https://codeforces.com/contest/1696/problem/B
//答案肯定在0 1 2三个数字中产生
//0:数组元素全为0
//1:不含0,或者所有的0都在左边或者右边
//2:两个非0的数之间含有0

#include
using namespace std;
#define int long long
int v[200005];

signed main()
{
	int tt;
	cin>>tt;
	while(tt--)
	{
		int n,p=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>v[i];
			if(v[i])p=i;
		}	
		if(p==0){puts("0");continue;}
		int a=0,b=0,c=0;
		for(int i=1;i<=n;i++)
		{
			if(a==0&&v[i])a=1;
			if(a==1&&v[i]==0)b=1;
			if(b==1&&v[i]){c=1;break;}
		}
		if(c==1)puts("2");
		else puts("1");
	}
}

https://codeforces.com/contest/1696/problem/C
//把所有的数组元素都归为最小,另外,需要另一个元素记录数组元素含有的个数
//x==2,原数组:1 2 4 8 0
==>(1,1),(2,7),(0,1);
//比较两个变化后的数组是否相同
//思路好想,但写程序说不定会超时,这段是学戴神的

#include
using namespace std;
#define int long long
#define ft first
#define sd second
int a[200005],b[200005];

signed main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	int tt;
	for(cin>>tt;tt--;)
	{
		int n,x,m;
		cin>>n>>x;
		for(int i=1;i<=n;i++)
			cin>>a[i];
		cin>>m;
		for(int i=1;i<=m;i++)
			cin>>b[i];
		
		vector<pair<int,int>>v,w;
		v.push_back({0,0});
		w.push_back({0,0});
		for(int i=1;i<=n;i++)
		{
			int res=1;
			while(a[i]%x==0)
			{
				a[i]/=x;res*=x;
			}
			if(a[i]!=v.back().ft){v.push_back({a[i],res});}
			else v.back().sd+=res;
		}
		for(int i=1;i<=m;i++)
		{
			int res=1;
			while(b[i]%x==0)
			{
				b[i]/=x;res*=x;
			}
			if(b[i]!=w.back().ft){w.push_back({b[i],res});}
			else w.back().sd+=res;
		}
		if(v==w)
		{
			puts("YES");
		}
		else puts("NO");
	}
}

你可能感兴趣的:(gaogesing的作业,c++,算法,c语言)