• 【比赛记录】10.18 Codeforces Round #676 (Div. 2)


    A

    题目大意:给定(a,b,)(minleft{(x⊕a)+(x⊕b) ight})

    (⊕)是异或。

    ( ext{solution:})

    显然答案应该是(a xor b.)令两个括号其中一者为(0)即可。

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int T;
    	scanf("%d",&T);
    	while(T--){
    		int a,b;
    		scanf("%d%d",&a,&b);
    		cout<<min((a^b),(a^b))<<endl;
    	}
    	return 0;
    }
    

    B

    题目大意:起点((1,1))终点((n,n),)矩阵中有(0/1,)四联通,只能走数字一样的地方,问能不能改变最多两个格子使得从起点无法到达终点。

    ( ext{solution:})

    考虑对起点和终点周围的两个格子分类讨论即可。

    #include<bits/stdc++.h>
    using namespace std;
    int T,n,a[501][501];
    int main(){
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		for(int i=1;i<=n;++i){
    			for(int j=1;j<=n;++j){
    				char c;
    				cin>>c;
    				if(i+j==2||i+j==n+n)continue;
    				a[i][j]=c-'0';
    			}
    		}
    		int ans=0;
    		int c1=0,c2=0;
    		if(a[1][2]==1)c1++;
    		if(a[2][1]==1)c1++;
    		if(a[n][n-1]==0)c1++;
    		if(a[n-1][n]==0)c1++;
    		if(a[1][2]==0)c2++;
    		if(a[2][1]==0)c2++;
    		if(a[n][n-1]==1)c2++;
    		if(a[n-1][n]==1)c2++;
    		ans=min(c1,c2);
    		printf("%d
    ",ans);
    		if(ans==0)continue;
    		if(ans==c1){
    			if(a[1][2]==1)cout<<"1 2
    ";
    			if(a[2][1]==1)cout<<"2 1
    ";
    			if(a[n][n-1]==0)cout<<n<<" "<<n-1<<endl;
    			if(a[n-1][n]==0)cout<<n-1<<" "<<n<<endl;
    		}
    		else{
    			if(a[1][2]==0)cout<<"1 2
    ";
    			if(a[2][1]==0)cout<<"2 1
    ";
    			if(a[n][n-1]==1)cout<<n<<" "<<n-1<<endl;
    			if(a[n-1][n]==1)cout<<n-1<<" "<<n<<endl;
    		}
    	}	
    	return 0;
    }
    

    C

    题目大意:给定一字符串,有两种操作,选择(iin (1,n),s o s_is_{i-1}...s_2+s)(s o s+s_{n-1}s_{n-2}...s_i)使得(s)变为一个回文串。

    ( ext{solution:})

    考虑成套方法:

    • 进行( ext{L 2})使得字符串变为(s.s.....)

    • 进行( ext{R 3})使得字符串变为(s.s..........s)

    • 进行( ext{R 2})使得字符串变为(s.s..........s..........s.)

    • 进行( ext{R lastpos-1})使得字符串变为(s.s..........s..........s.s)

    容易发现,上述字符串满足题目要求。

    #include<bits/stdc++.h>
    using namespace std;
    char s[100001];
    int main(){
    	scanf("%s",s+1);
    	puts("4");
    	int g=strlen(s+1),L=strlen(s+1);
    	puts("L 2");
    	g++;
    	puts("R 3");
    	g+=(g-3);
    	g+=(g-2);
    	puts("R 2");
    	cout<<"R "<<g-1<<endl;
    	return 0;
    }
    
  • 相关阅读:
    前端 -- html
    MySQL索引
    Python操作MySQL
    MySQL表操作进阶
    MySQL表操作基础
    Github使用教程
    Android开发面试题
    MYSQL学习记录
    Java开发从零到现在
    JavaWeb(JSP/Servlet/上传/下载/分页/MVC/三层架构/Ajax)
  • 原文地址:https://www.cnblogs.com/h-lka/p/13836857.html
Copyright © 2020-2023  润新知