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\n");
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\n");
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\n",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\n");
else
printf("No\n");
}
}
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\n",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\n",a1[i]):printf("%d ",a1[i]);
}
else if(c3==n||c4==n)
{
for(int i=0; i<n; i++)
i==n-1?printf("%d\n",a2[i]):printf("%d ",a2[i]);
}

}
return 0;
}

Codeforces Round #418 (Div. 2)的更多相关文章

  1. Codeforces Round #418 (Div. 2) D. An overnight dance in discotheque

    Codeforces Round #418 (Div. 2) D. An overnight dance in discotheque 题意: 给\(n(n <= 1000)\)个圆,圆与圆之间 ...

  2. Codeforces Round #418 (Div. 2).C two points

    C. An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 m ...

  3. Codeforces Round #418 (Div. 2) B. An express train to reveries

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  4. Codeforces Round #418 (Div. 2)D

    给n个圆要么包含,要么相分离,没有两个公共点,当成一棵树,把包含的面积大的放在上面 如图最上面的par记为-1,level记为0,当par==-1||level==1时就加否则减, 就是第一,二层先加 ...

  5. Codeforces Round #418 (Div. 2) A+B+C!

    终判才知道自己失了智.本场据说是chinese专场,可是请允许我吐槽一下题意! A. An abandoned sentiment from past shabi贪心手残for循环边界写错了竟然还过了 ...

  6. Codeforces Round #418 (Div. 2) C

    Description Nadeko's birthday is approaching! As she decorated the room for the party, a long garlan ...

  7. Codeforces Round #418 (Div. 2) B

    Description Sengoku still remembers the mysterious "colourful meteoroids" she discovered w ...

  8. Codeforces Round #418 (Div. 2) A

    Description A few years ago, Hitagi encountered a giant crab, who stole the whole of her body weight ...

  9. Codeforces Round #418 (Div. 2) C. An impassioned circulation of affection

    C. An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 m ...

随机推荐

  1. Cpython解释器下实现并发编程

    一 背景知识 二 python并发编程之多进程 三 python并发编程之多线程 四 python并发编程之协程 五 python并发编程之IO模型 六 补充:paramiko模块 七 作业 一 背景 ...

  2. TT-付款方式

    付款方式 一般T/T是可以的,上述客户我们采用的付款方式就是定金加TT,如果是信用证方式,那么需要资信良好的开证行: 中国工商银行 汇丰银行 渣打银行 花旗银行 MUSLIM COMMERCIAL B ...

  3. MTD的认识

    MTD即内存计数设备,是linux中对ROM.NORFLASH.NAND  Flash等存储设备抽象出来的一个设备层,它向上提供统一的访问接口:读写.擦除等:屏蔽了底层硬件的操作.各类存储设备的差别. ...

  4. 牛客小白月赛13 小A的最短路(lca+RMQ)

    链接:https://ac.nowcoder.com/acm/contest/549/F来源:牛客网 题目描述 小A这次来到一个景区去旅游,景区里面有N个景点,景点之间有N-1条路径.小A从当前的一个 ...

  5. python 修改的函数装饰器

    把好的代码记录下来 方便以后学习 修改的函数参数装饰器 from functools import wraps import time import logging def warn(timeout) ...

  6. JS继承(一)

    突然发现自己很久没写过什么东西了 其实从博客更新的速度上就可以看出一个人近期有没有成长 对 …… 我没有成长 也可以由此看出自己选择的企业是不是对的 对 …… 我不会离职…… 略略略 来咬我啊…… 于 ...

  7. 10.spring-boot基于角色的权限管理页面实现

    10.spring-boot基于角色的权限管理页面实现

  8. 干货 | PHP就该这么学!

    前段时间和大家一起分享了一篇关于学习方法内容<大牛与搬运工的差距——学习方法的力量>.我们将学习过程分成八步,并借鉴了敏捷开发的迭代思想,以达到自我迭代学习的效果.行胜于言,理论结合实践才 ...

  9. java分布式电子商务云平台b2b b2c o2o需要准备哪些技术??

    技术解决方案 开发语言: java.j2ee 数据库:mysql JDK支持版本: JDK1.6.JDK1.7.JDK1.8版本 核心技术:分布式.云服务.微服务.服务编排等. 核心架构: 使用Spr ...

  10. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...