Codeforces Round #735 (Div. 2) A-D

Posted 尘封陌路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #735 (Div. 2) A-D相关的知识,希望对你有一定的参考价值。

这场上分场,早知道用大号打了。。

A. Cherry

区间肯定越小越好,那就找一个相邻乘积最大的。

AC

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100010];
int n;
void get()

		ll anss=-1;
		for(int i=1;i<n;i++)
			anss=max(anss,a[i]*a[i+1]);
		
		cout<<anss<<"\\n";

void solve()

		
		cin>>n;
		for(int i=1;i<=n;i++)
			cin>>a[i];
		
		get();
	

int main()
	int t;
	cin>>t;
	while(t--)
		solve();
	 


B. Cobb

因为K最大就100,考虑到N很大的时候,ij才是占主导,所以肯定优先考虑ij大的时候。n小的时候直接暴力,n大的时候枚举后面100项

ACcode

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=1e5+10;
ll a[N];

int n,k;
ll get(int len)

	ll ans=-0x3f3f3f3f;
	for(int i=len;i<=n;i++)
	
		for(int j=i+1;j<=n;j++)
		
			ans=max(ans,1ll*i*j-1ll*k*((ll)a[i]|a[j]));
		
	
	return ans;

void solve()

	
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	
	int cnt=max(1,n-100);
	cout<<get(cnt)<<"\\n";
	

int main()

	int t;
	cin>>t;
	while(t--)
	
		solve();
	
	return 0;

C. Mikasa

1.显然n>m,答案是0

当N=xxxx0xxxx
当M=xxxx1xxxx

可以得出,M的1的后面所有数都可以取到 即范围是(xxxx011111)
然后另一种 N:xxxxxx1xxxx
          M:xxxxxx0xxxx 
           因为M只能变小不能变大,所有0不能变成1,
		   所有从这里开始就有的数取不到
		   那么这个取不到的数要最小,
		   M从这个0开始以及后面的位随便变,
		   目的是生成最小的Mex,那么M这一位的
		   0变成1,使得1^1=0,那么答案就变成
		   找最小的mex^n>m ,
		   然后运用4 6 这个样例可以发现让m+1,
		   转换成 mex^n>=m+1

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()

	int t;
	cin>>t;
	while(t--)
	
		int n,m;
		cin>>n>>m;
		if(n>m)
		
			cout<<"0"<<endl;
		
		else
		
			m++;
			ll res=0;
			for(int i=31;i>=0;i--)
			
				int u=(n>>i)&1;
				int p=(m>>i)&1; 
				if(!u&&p)
				
					res+=1<<i;
					//break;
				
				if(u&&!p) break;
			
			cout<<res<<"\\n";
		
	
	return 0;
  

D. Diane

分奇偶构造

奇数把用aabcaaa 这样
把bc放中间

偶数用 aabaaa 这样
把b放中间偏左或者偏右

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
int main() 
    
    ll T;
    cin>>T;
    while(T--)
    
        int n;
        cin>>n;
        if(n==1)
        
        	cout<<"a"<<endl;
        	continue;
        
        if(n&1)
        
        	int k=(n-2)/2;
        	for(int i=1;i<=k;i++)
        	cout<<"a";
        	cout<<"bc";
        	for(int i=1;i<=k+1;i++)
        		cout<<"a";
        	cout<<endl;
        
        else
        
        	int k=n/2;
        	for(int i=1;i<k;i++)cout<<"a";
        	cout<<"b";
        	for(int i=1;i<=k;i++)cout<<"a";
        	cout<<endl;
        
    
    return 0;


以上是关于Codeforces Round #735 (Div. 2) A-D的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #735 (Div. 2)-C. Mikasa-题解

Codeforces Round #735 (Div. 2)-B. Cobb-题解

Codeforces Round #735 (Div. 2)-A. Cherry-题解

Codeforces Round #735 (Div. 2)-C. Mikasa-题解

Codeforces Round #735 (Div. 2)-B. Cobb-题解

Codeforces Round #735 (Div. 2)-A. Cherry-题解