zoukankan      html  css  js  c++  java
  • CodeForces水题

    CodeForces754A

    题意:
    给一个数组,让你变成1-n,输出变换区间,要求原区间和不为0.
    思路:
    如果原数组不为0,那就是YES;
    如果为0,则从1开始扫过去,碰到不为0时,分两个区间[1,k],[k+1,n]

    #include<bits/stdc++.h>
    using namespace std;
    
    int a[110];
    
    int main()
    {
        int n,i,sum;
        while(~scanf("%d",&n))
        {
            sum=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                sum+=a[i];
            }
            if(sum==0)
            {
                sum=0;
                for(int s=1;s<=n;s++)
                {
                    sum+=a[s];
                    if(sum)
                    {
                        if(s!=n)
                        {
                            puts("YES");
                            puts("2");
                            printf("%d %d
    ",1,s);
                            printf("%d %d
    ",s+1,n);
                        }
                        else
                        {
                            puts("YES");
                            printf("%d %d
    ",1,n);
                        }
                        return 0;
                    }
                }
                puts("NO");
            }
            else
            {
                puts("YES");
                puts("1");
                printf("%d %d
    ",1,n);
            }
        }
        return 0;
    }


    CodeForces754B

    题意:

     '.' (empty cell),
     'x' (lowercase English letter x),
     'o' (lowercase English letter o).
     horizontal, vertical or diagonal有3个获胜,问能否在一部内使得有x在horizontal, vertical or diagonal连成3个。
    思路:

    暴力枚举horizontal, vertical or diagonal?

    #include<bits/stdc++.h>
    using namespace std;
    
    char ma[5][5];
    
    bool manzu(int x)
    {
        if(x>=0&&x<4)
            return true;
        return false;
    }
    
    bool judge_three(int sx,int sy,int ex,int ey)
    {
        int num1,num2;
        int i,j;
        num1=num2=0;
        for(i=sx,j=sy;;)
        {
            if(ma[i][j]=='x') num1++;
            if(ma[i][j]=='.') num2++;
            if(i==ex&&j==ey)
                break;
            if(i<ex) i++;
            if(j<ey) j++;
        }
        if(num1==2&&num2==1)
            return true;
        return false;
    }
    
    bool Judge(int x,int y)
    {
        if(manzu(x+2))
            if(judge_three(x,y,x+2,y)) return true;
        if(manzu(x-2))
            if(judge_three(x-2,y,x,y)) return true;
        if(manzu(y+2))
            if(judge_three(x,y,x,y+2)) return true;
        if(manzu(y-2))
            if(judge_three(x,y-2,x,y)) return true;
        if(manzu(x+2)&&manzu(y+2))
            if(judge_three(x,y,x+2,y+2)) return true;
        if(manzu(x-2)&&manzu(y-2))
            if(judge_three(x-2,y-2,x,y)) return true;
        if(manzu(x+2)&&manzu(y-2))
        {
            int num1=0,num2=0;
            if(ma[x][y]=='x') num1++;
            if(ma[x][y]=='.') num2++;
            if(ma[x+1][y-1]=='x') num1++;
            if(ma[x+1][y-1]=='.') num2++;
            if(ma[x+2][y-2]=='x') num1++;
            if(ma[x+2][y-2]=='.') num2++;
            if(num1==2&&num2==1) return true;
        }
        if(manzu(x-2)&&manzu(y+2))
        {
            int num1=0,num2=0;
            if(ma[x][y]=='x') num1++;
            if(ma[x][y]=='.') num2++;
            if(ma[x-1][y+1]=='x') num1++;
            if(ma[x-1][y+1]=='.') num2++;
            if(ma[x-2][y+2]=='x') num1++;
            if(ma[x-2][y+2]=='.') num2++;
            if(num1==2&&num2==1) return true;
        }
        return false;
    }
    
    int main()
    {
        for(int i=0; i<4; i++)
            scanf("%s",ma[i]);
        for(int i=0;i<4;i++)
            for(int j=0;j<4;j++)
                if(Judge(i,j))
                {
                    puts("YES");
                    return 0;
                }
        puts("NO");
        return 0;
    }
    /*
    o.x.
    o...
    .x..
    ooxx
    */
    
    CodeForces599A
    题意:
    d1 is the length of the path  house and first shop;
    d2 is the length of the path  house and second shop;
    d3 is the length of the path  both shops.
    思路:
    显然水题

    #include<bits/stdc++.h>
    using namespace std;
    
    int a[110];
    
    int main()
    {
        int num=0;
        int d1,d2,d3;
        scanf("%d%d%d",&d1,&d2,&d3);
        a[num++]=d1+d2+d3;
        a[num++]=2*(d1+d2);
        a[num++]=2*(d1+d3);
        a[num++]=2*(d2+d3);
        sort(a,a+num);
        printf("%d
    ",a[0]);
        return 0;
    }

    CodeForces599B

    题意:
    给出f[],b[];
    构造ai, 使得 b[i]=f[ai]
    只有一组则直接输出
    有多种情况输出"Ambiguity"
    如果不可能就是不可能
    思路:
    直接模拟。
    先搞出impossible的情况,也就是没有匹配的,其次看是不是存在多个的。
    然后就是输出坐标就好了。

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=1e5+10;
    int index[N];
    int f[N],a[N],n,m;
    int num[N];
    bool flag,flat;
    
    int main()
    {
    	scanf("%d%d",&n,&m);
    	memset(num,0,sizeof(num));
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&f[i]);
    		index[f[i]]=i;
    		num[f[i]]++;
    	}
    	flag=false;
    	flat=false;
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%d",&a[i]);
    		if(!num[a[i]])
    			flag=true;
    		if(num[a[i]]>1)
    			flat=true;
    	}
    	if(flag)
    		puts("Impossible");
    	else if(flat)
    		puts("Ambiguity");
    	else
    	{
    		puts("Possible");
    		for(int i=1;i<=m;i++)
    			printf("%d ",index[a[i]]);
    	}
    	return 0;
    }



  • 相关阅读:
    文件隐藏在一张图片里
    晶振
    主宰全球的10大算法
    java+mysql连接的优化
    排序剔除
    js数据类型
    字符实体
    表单
    定义样式表
    布局相关的属性
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777450.html
Copyright © 2011-2022 走看看