zoukankan      html  css  js  c++  java
  • Codeforces Round #418 (Div. 2)

    A:

    不细心WA了好多次

    题意:给你一个a序列,再给你个b序列,你需要用b序列中的数字去替换a序列中的0,如果能够替换,则需要判断a是否能构成一个非递增的序列,a,b中所有的数字不会重复

    思路:就是一步一步来,我想的可能复杂了点==。

    • 如果a中0的个数小于b的长度就No。
    • 如果a中0的个数大于等于b的长度
    1. 如果a中存在非递增就Yes,去掉0.
    2. 记录每个0前面x与后面y第一个非0的数,如果有y<x就Yes,否则如果x与y之间的0的个数>=2,不管怎么样都是Yes,否则在b中能找到一个数满足b[i]>y||b[i]<x就Yes。
    3. 以上判断的循环结束后,如果a数组末尾存在0,如果b数组的长度>=2,就Yes,否则b的长度为1 的话判断b[0]<a[n-1]就Yes
    • 除开以上情况剩下就是No

    代码:

    #include<stdio.h>
    using namespace std;
    int n,k;
    int a[110];
    int b[110];
    int main()
    {
    while(~scanf("%d%d",&n,&k))
    {
    int cnt=0;
    for(int i=0; i<n; i++)
    {
    scanf("%d",&a[i]);
    if(a[i]==0)
    cnt++;
    }
    for(int i=0; i<k; i++)
    scanf("%d",&b[i]);
    int x=-1,y=-1,z=0;
    if(cnt>k)
    printf("No ");
    else
    {
    int flag=0;
    for(int i=0; i<n; i++)
    {
    if(a[i]>a[i+1]&&(i+1)<n&&a[i+1]!=0)
    {
    //printf("hhhhhhhhhhhhhhh ");
    flag=1;
    break;
    }
    if(a[i]!=0)
    y=a[i];
    if(a[i]!=0&&z==0)
    x=a[i];
    if(a[i]==0)
    z++;
    if(a[i]!=0&&z>0)
    {
    //printf("x=%d y=%d ",x,y);
    if(x>y)
    {
    z=0;
    flag=1;
    break;
    }
    else if(x<y)
    {
    if(z>=2)
    {
    flag=1;
    break;
    }
    for(int i=0; i<k; i++)
    {
    if(b[i]>y||b[i]<x)
    {
    flag=1;
    break;
    }
    }
    z=0;
    break;
    }
    }
    }
    if(x==y&&x!=a[n-1]&&y!=a[n-1])
    {
    if(k>=2)
    flag=1;
    else
    {
    if(b[k-1]<x)
    flag=1;
    }
    }
    if(flag)
    printf("Yes ");
    else
    printf("No ");
    }
    }
    return 0;
    }

    B:

    题意:给你两个数组,两个数组里面的值都是从1~n,并且两个数组内最多有两个数相同,两个数组之前至少有一对对应相同。要求你求得一个数组p是的a数组与b数组都是只有一个数与p对应的值不同,并且p里面色数不能重复。

    思路:先预处理a,b数组,将其变为a1,a2,b1,b2。先找到a中分别相同的数,把其中一个换成没有在a中出现过的数字,得到两个新的数组a1,a2。同样b也是得到,b1,b2,然后在a1a2中找一个数组能与b1b2中的一个数组完全匹配,就直接输出这个数组就可以了。

    代码:

    #include<stdio.h>
    #include<string.h>
    using namespace std;
    int n;
    int a[1100];
    int a1[1100];
    int a2[1100];
    int visa[1100];
    int b[1100];
    int b1[1100];
    int b2[1100];
    int visb[1100];
    int main()
    {
    while(~scanf("%d",&n))
    {
    memset(visa,0,sizeof(visa));
    memset(visb,0,sizeof(visb));
    for(int i=0; i<n; i++)
    {
    scanf("%d",&a[i]);
    visa[a[i]]++;
    }
    int x;
    for(int i=1; i<=n; i++)
    if(!visa[i])
    x=i;
    for(int i=0; i<n; i++)
    {
    scanf("%d",&b[i]);
    visb[b[i]]++;
    }
    int y;
    for(int i=1; i<=n; i++)
    if(!visb[i])
    y=i;
    // printf("x=%d y=%d ",x,y);
    for(int i=0; i<n; i++)
    {
    int j;
    for(j=i+1; j<n; j++)
    {
    if(a[i]==a[j])
    break;
    }
    if(j==n&&visa[a[i]]!=-1)
    {
    a1[i]=a[i];
    a2[i]=a[i];
    }
    else if(visa[a[i]]!=-1)
    {
    a1[i]=a[i];
    a1[j]=x;
    a2[i]=x;
    a2[j]=a[i];
    visa[a[i]]=-1;
    }
    }
    for(int i=0; i<n; i++)
    {
    int j;
    for(j=i+1; j<n; j++)
    {
    if(b[i]==b[j])
    break;
    }
    if(j==n&&visb[b[i]]!=-1)
    {
    b1[i]=b[i];
    b2[i]=b[i];
    }
    else if(visb[b[i]]!=-1)
    {
    b1[i]=b[i];
    b1[j]=y;
    b2[i]=y;
    b2[j]=b[i];
    visb[b[i]]=-1;
    }
    }
    int c1=0,c2=0,c3=0,c4=0;
    for(int i=0;i<n;i++)
    {
    if(a1[i]==b1[i])
    c1++;
    if(a1[i]==b2[i])
    c2++;
    if(a2[i]==b1[i])
    c3++;
    if(a2[i]==b2[i])
    c4++;
    }
    if(c1==n||c2==n)
    {
    for(int i=0; i<n; i++)
    i==n-1?printf("%d ",a1[i]):printf("%d ",a1[i]);
    }
    else if(c3==n||c4==n)
    {
    for(int i=0; i<n; i++)
    i==n-1?printf("%d ",a2[i]):printf("%d ",a2[i]);
    }

    }
    return 0;
    }

  • 相关阅读:
    Apache 常用伪静态配置
    Nginx 常用伪静态配置
    数组的完全随机排列
    PHP获得IP地址
    百度编辑器ueditor代码高亮效果前台不显示的解决方法
    ckeditor 图片上传功能配置
    sendmail 邮件服务器搭建
    关于MYSQL Incorrect string value
    linux 常见命令
    zend framework 初识
  • 原文地址:https://www.cnblogs.com/xiejiamin/p/7243394.html
Copyright © 2011-2022 走看看