蓝桥杯 试题 算法训练 My Bad
时间:2022-07-24
本文章向大家介绍蓝桥杯 试题 算法训练 My Bad,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
看懂题就不难写了~
#include<bits/stdc++.h>
using namespace std;
struct dat_edge
{
int aim,last;
}edge[201];
int n,m,k,inde[101],coun[101],tmp_coun[101],pl[101],len_edge,num_key,key[300][101];
char kind[101];
void insert_edge(int x,int y)
{
len_edge++;
edge[len_edge].aim=y;
edge[len_edge].last=pl[x];
pl[x]=len_edge;
}
void init(int o,string z)
{
int p,i,num;
string t;
p=1;
z+=' ';
for(i=1;i<z.length();i++)
if(z[i]==' ')
{
t=z.substr(p,i-p);
if(t[0]=='i')
num=0;
else
num=n;
if(t.length()==2)
num+=t[1]-'0';
else
{
num+=(t[1]-'0')*10+t[2]-'0';
}
coun[o]++;
insert_edge(num,o);
p=i+1;
}
}
bool solve(int key[],int poi,int sta)
{
int i,p,o,w,tmp,que[101],f[101];
for(i=1;i<=n+m+k;i++)
{
f[i]=0;
}
for(i=1;i<=n;i++)
f[i]=key[i];
for(i=1;i<=m;i++)
{
if(kind[i]=='a')
f[i+n]=1;
else
f[i+n]=0;
}
o=n;w=0;
for(i=1;i<=n;i++)
que[i]=i;
while(w<o)
{
w++;
if(que[w]==poi)
{
if(sta==2)
f[que[w]]=!f[que[w]];
else
f[que[w]]=sta;
}
p=pl[que[w]];
while(p!=-1)
{
coun[edge[p].aim]--;
if(coun[edge[p].aim]==0)
{
que[++o]=edge[p].aim;
}
tmp=edge[p].aim;
if(kind[tmp-n]=='a')
{
if(f[que[w]]==0)
f[tmp]=0;
}
else if(kind[tmp-n]=='o')
{
if(f[que[w]]==1)
f[tmp]=1;
}
else if(kind[tmp-n]=='x')
{
f[tmp]=f[tmp]^f[que[w]];
}
else
{
f[tmp]=!f[que[w]];
}
p=edge[p].last;
}
}
for(i=1;i<=n+m+k;i++)
coun[i]=tmp_coun[i];
for(i=1;i<=k;i++)
{
if(f[inde[i]+n]!=key[n+i])
return false;
}
return true;
}
void work(int t)
{
int i,j,p,ans1,ans2,coun_ans;
bool ok=true;
for(i=1;i<=num_key;i++)
{
if(!solve(key[i],-1,-1))
{
ok=false;
break;
}
}
if(ok)
{
cout<<"Case "<<t<<": No faults detectedn";
return;
}
ans1=ans2=coun_ans=0;
for(i=1;i<=m;i++)
{
for(j=0;j<=2;j++)
{
ok=true;
for(p=1;p<=num_key;p++)
{
ok=solve(key[p],i+n,j);
if(!ok)
break;
}
if(ok)
{
ans1=i;
ans2=j;
coun_ans++;
}
}
}
if(coun_ans!=1)
{
cout<<"Case "<<t<<": Unable to totally classify the failuren";
return;
}
if(ans2==2)
{
cout<<"Case "<<t<<": Gate "<<ans1<<" is failing; output invertedn";
return;
}
if(ans2==0)
{
cout<<"Case "<<t<<": Gate "<<ans1<<" is failing; output stuck at 0n";
return;
}
if(ans2==1)
{
cout<<"Case "<<t<<": Gate "<<ans1<<" is failing; output stuck at 1n";
return;
}
}
int main()
{
int t,i,j;
string z;
t=0;
while(cin>>n>>m>>k && n+m+k!=0)
{
t++;
memset(coun,0,sizeof(coun));
len_edge=-1;
for(i=1;i<=n+m+k;i++)
pl[i]=-1;
for(i=1;i<=m;i++)
{
cin>>kind[i];
getline(cin,z);
init(i+n,z);
}
for(i=1;i<=n+m+k;i++)
tmp_coun[i]=coun[i];
for(i=1;i<=k;i++)
cin>>inde[i];
cin>>num_key;
for(i=1;i<=num_key;i++)
for(j=1;j<=n+k;j++)
cin>>key[i][j];
work(t);
}
return 0;
}
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码]
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(5)-EF增删改查
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
- No.3 啥是数据运营(三):思维方式
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(7)-MVC与EasyUI DataGrid
- MySQL数据同步【双主热备】
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(4)-创建项目解决方案
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(3)-漂亮系统登陆界面
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(2)-easyui构建前端页面框架[附源码]
- 扬言毁灭人类的索菲亚再一次挑战了人类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 三种延迟操作的实现方法
- 基于Android在布局中动态添加view的两种方法(总结)
- Android向node.js编写的服务器发送数据并接收请求
- Android startActivityForResult和setResult的区别
- Linux系统使用Fuser命令的方法
- Android实现地理定位功能
- Android实现在ServiceManager中加入自定义服务的方法详解
- Android studio so库找不到问题解决办法
- Android使用ViewPager实现屏幕滑动效果
- Android 自定义view实现进度条加载效果实例代码
- Android电池电量监听的示例代码
- Android 解决ScrollView嵌套CridView显示问题
- Android利用zxing快速集成二维码扫描的实例教程
- Android中使用SharedPreferences完成记住账号密码的功能
- Android Intent封装的实例详解