当前位置:网站首页>(2022牛客多校五)C-Bit Transmission(思维)
(2022牛客多校五)C-Bit Transmission(思维)
2022-08-02 06:45:00 【AC__dream】
题目:
样例输入:
3
0 NO
1 YES
2 YES
0 YES
1 YES
2 YES
0 YES
1 YES
2 YES
样例输出:
111
题意:有个01组成的字符串,对某些位置询问是否是1 询问3*n次
有至多一次询问 返回的答案是错误的,也可以是所有的询问都是正确的
问这些询问结果能否唯一确定字符串。
这道题目比赛的时候因为数据问题疯狂wa,即使到最后改完数据还是有一些错误,一会我会说出数据错误的地方。
先来分析一下这道题,首先我们需要记录一下每一位上被询问得到是1/0的次数,记作cnt[i][1/0]
如果某一位一直没被询问,也就是说cnt[i][1]=cnt[i][0]=0,那么这肯定是无法唯一确定的
当cnt[i][0]>1,cnt[i][1]>1时也是错误的,因为题意种说明了能够允许的错误次数不超过1次
如果存在cnt[i][1]=cnt[i][0]=1那么也是不能唯一确定的,因为我们无法确定他是哪一次说的慌
我们还需要一个id来记录说谎的位置,比如某一个i是cnt[i][1]>1,cnt[i][0]=1,那么显然就是说第i位为0的那次说了慌,这样的说谎位置最多只能有一个,否则也是不符合题意的
除了上面的这一些情况,还有一种不行的情况,也是数据出bug的地方,就是说如果某个位置只被询问了一次,而此时没有一个位置是我们能够确定他一定说谎的,那么这种情况下无论他说不说谎都是说谎次数小于等于1的,所以这种情况也是没办法得到唯一解的,但是数据中有符合这种情况的,但是答案却给错了,赛后我测试了一下,加上这种情况能过96%,但是不考虑这种情况就能通过全部数据,我觉得还是严谨点比较好,所以下面给出的代码是考虑了这种情况的代码:
此代码不能通过赛题,如若想通过赛题,请注释我代码种注明的那条语句
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
const int N=1e5+10;
int cnt[N][2];
char s[10];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++) cnt[i][0]=cnt[i][1]=0;
int t;
for(int i=1;i<=3*n;i++)
{
scanf("%d%s",&t,s);
if(s[0]=='Y') cnt[t+1][1]++;
else cnt[t+1][0]++;
}
int id=0;
int cntt=0;//cntt记录第i个位置只有一个询问的位置个数
bool flag=true;
for(int i=1;i<=n;i++)
{
if(cnt[i][0]>=2&&cnt[i][1]>=2)
{
flag=false;
break;
}
if(cnt[i][0]==cnt[i][1])//要么都没有被问过,要么都被问过一次
{
flag=false;
break;
}
if((cnt[i][0]>0&&cnt[i][1]==0)||(cnt[i][0]==0&&cnt[i][1]>0))
{
if(cnt[i][0]==1||cnt[i][1]==1) cntt++;
continue;
}
if(cnt[i][0]==1&&cnt[i][1]>1)
{
if(id)
{
flag=false;
break;
}
else id=i;
}
else if(cnt[i][0]>1&&cnt[i][1]==1)
{
if(id)
{
flag=false;
break;
}
else id=i;
}
}
if(!id&&cnt) flag=false;//题目数据有问题,注释此语句即可AC
if(flag)
{
for(int i=1;i<=n;i++)
if(i==id)
{
if(cnt[i][0]>1) printf("0");
else printf("1");
}
else
{
if(cnt[i][0]>0) printf("0");
else printf("1");
}
puts("");
}
else
puts("-1");
}
return 0;
}
边栏推荐
- nacos源码启动找不到istio包
- PWA 踩坑 - 第一次加载页面后无法获取CacheStorage某些资源
- CAT1 4G+以太网开发板腾讯云手机微信小程序显示温度和下发控制
- Vscode connect to remote server "Acquiring the lock on the/home / ~ 'problem
- 根据一个字段的内容去更新另一个字段的数据,这样的sql语句该怎么样书写
- 张驰课堂:六西格玛培训工具——箱线图
- 逆变器锁相原理及DSP实现
- typescript ‘props‘ is declared but its value is never read 解决办法
- (笔记整理未完成)【图论】图的遍历
- (部分不懂,笔记整理未完成)【图论】差分约束
猜你喜欢
CAT1 4G+Ethernet development board Tencent cloud mobile phone WeChat applet display temperature and delivery control
_2_顺序表
MPLS的相关技术
Clapper that can interact with the audience in real time
新产品立大功 伟世通第二季度营收双增
“蔚来杯“2022牛客暑期多校训练营5,签到题KBGHFCD
Unity Shader学习(七)纹理图像的简单使用
Facebook社媒营销的5大技巧,迅速提高独立站转化率!
2022.07.31(LC_6132_使数组中所有元素都等于零)
实例027:递归输出
随机推荐
Leetcode Weekly 304
Ue after video tutorial first
(笔记整理未完成)【图论】图的遍历
CAT1 4G+Ethernet development board Tencent cloud mobile phone WeChat applet display temperature and delivery control
根据一个字段的内容去更新另一个字段的数据,这样的sql语句该怎么样书写
海缆探测仪TSS350(二)
解决C#非静态字段、方法或属性“islandnum.Program.getIslandCount(int[][], int, int)”要求对象引用
正则表达式的理解学习
获取间隔的日期列表工具类
C#重点问题之Struct和Class的异同
Gradle系列——Gradle插件(基于Gradle文档7.5)day3-2
[Dataset][VOC] Male and female dataset voc format 6188 sheets
optional
SimpleChannelInboundHandler使用总结
Two good php debug tutorials
实例026:递归求阶乘
Wuhan 2022 organizing of the high-performance computing added new ecological development of high-performance computing
实例032:反向输出II
请教一下,Flink SQL ,JDBC sink 入 mysql 库,想要搞一个自增主键,要怎么写
宝塔+FastAdmin 404 Not Found