zoukankan      html  css  js  c++  java
  • 神智无知(CF)

    A. Matrix Game
    题目链接:https://codeforces.ml/contest/1365/problem/A

    对矩阵把不可操作的行列除去,得到一个h×w的矩阵

    由于每当一个人操作一次,就会占去一行一列,最多操作比较h,w得较小的数为操作次数,当为奇数Ashish赢,偶数Vivek赢
     
        #include <iostream>
        using namespace std;
        int t,n,m,h,w;
        int map[57][57];
        int main(){
        	scanf("%d",&t);
        	while(t--){
        		scanf("%d %d",&n,&m);
        		h=0,w=0;
        		
        		for(int i=1;i<=n;i++){
        			int ok=1;
        			for(int j=1;j<=m;j++){
        				scanf("%d",&map[i][j]);
        				if(map[i][j]==1) ok=0;
        			}
        			if(ok) h++;
        		}
        		for(int i=1;i<=m;i++){
        			int ok=1;
        			for(int j=1;j<=n;j++){
        				if(map[j][i]==1) ok=0;
        			}
        			if(ok) w++;
        		}
        //		cout<<h<<" "<<w<<endl;
        		int cnt=min(h,w);
        		if(cnt%2==0) printf("Vivek\n");
        		else printf("Ashish\n");
        	}
        }
    

    B. Trouble Sort

    只要b数组不全为0或1,就能把a数组非降序排列,特判a数组本就为非降序排列

        #include <iostream>
        #include <algorithm>
        using namespace std;
        int t,n,a[505],b[505],tp[505];
        int main(){
        	scanf("%d",&t);
        	while(t--){
        		scanf("%d",&n);
        		for(int i=1;i<=n;i++) scanf("%d",&a[i]),tp[i]=a[i];
        		for(int j=1;j<=n;j++) scanf("%d",&b[j]);
        		sort(tp+1,tp+1+n);
        		int ok=0;
        		for(int i=1;i<=n;i++){
        			if(tp[i]!=a[i]) ok=1;
        		}
        		if(ok){
        			int sum=0;
        			for(int i=1;i<=n;i++) sum+=b[i];
        			if(sum==0||sum==n) printf("No\n");
        			else printf("Yes\n");
        		}else{
        			printf("Yes\n");
        		}
        	}
        }
    

     C. Rotation Matching

    枚举b数组中bi右移与aj配对为元素对所需的步数,相同步数多的为元素对最多的

        #include <iostream>
        using namespace std;
        int n,a[200007],b[200007],vis[200007],bok[200007];
        int main(){
        	scanf("%d",&n);
        	for(int i=1;i<=n;i++) scanf("%d",&a[i]),vis[a[i]]=i;
        	for(int i=1;i<=n;i++) scanf("%d",&b[i]);
        	int ans=0;
        	for(int i=1;i<=n;i++){
        		int dis;
        		if(vis[b[i]]>=i) dis=vis[b[i]]-i;
        		else dis=vis[b[i]]+n-i;
        		bok[dis]++;
        		ans=max(ans,bok[dis]);
        	}
        	printf("%d\n",ans);
        }
    
  • 相关阅读:
    BZOJ2870 最长道路
    BZOJ1316 树上的询问
    BZOJ2238 Mst
    BZOJ4242 水壶
    [BeiJing2010组队]次小生成树Tree
    CODEVS1403 新三国争霸
    牛客网NOIP赛前集训营-提高组(第六场) C-树
    JSOI2008 最小生成树计数
    BZOJ2654 Tree
    牛客网NOIP赛前集训营-提高组(第六场)B-选择题
  • 原文地址:https://www.cnblogs.com/kksk/p/13081427.html
Copyright © 2011-2022 走看看