专栏文章
题解:P14584 点击平衡球
P14584题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @min1tmzw
- 此快照首次捕获于
- 2025/12/01 19:11 3 个月前
- 此快照最后确认于
- 2025/12/01 19:11 3 个月前
题目大意:
给定 个机关,你可以任意调换机关的顺序,第 个机关有对应的三个状态 表示是否允许 类型的球通过。
解题思路:
考虑到 并不大,所以模拟即可,这边给出一个特别简单的做法,只要枚举出第一次到第三次分别选择什么样的球的类型,然后进行模拟即可。
屎山代码如下:
CPP#include<bits/stdc++.h>
using namespace std;
struct sbb {
int a,b,c;
int tp;//个人变量名爱好,勿喷
} sb[105];
int n;
int ans=5;
int main() {
cin>>n;
for(int i=1; i<=n; i++)cin>>sb[i].a>>sb[i].b>>sb[i].c;
int nans=1;//模拟即可,对a,b,c全排列
for(int i=1; i<=n; i++)sb[i].tp=0;//清空标记(是否有被选择过)
for(int i=1; i<=n; i++)if(sb[i].a==1)sb[i].tp=1;
int cc=nans;
for(int i=1; i<=n; i++)if(sb[i].b==1&&sb[i].tp==0 )nans++,sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].c==1&&sb[i].tp==0 ) {
nans+=(nans==cc);//只要加第一次,剩下的是打标记
break;
}
ans=min(ans,nans);
nans=1;
for(int i=1; i<=n; i++)sb[i].tp=0;
for(int i=1; i<=n; i++)if(sb[i].a==1)sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].c==1&&sb[i].tp==0 )nans+=(nans==cc),sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].b==1&&sb[i].tp==0 ) {
nans+=(nans==cc);
break;
}
ans=min(ans,nans);
nans=1;
for(int i=1; i<=n; i++)sb[i].tp=0;
for(int i=1; i<=n; i++)if(sb[i].b==1)sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].a==1&&sb[i].tp==0 )nans+=(nans==cc),sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].c==1&&sb[i].tp==0 ) {
nans+=(nans==cc);
break;
}
ans=min(ans,nans);
nans=1;
for(int i=1; i<=n; i++)sb[i].tp=0;
for(int i=1; i<=n; i++)if(sb[i].b==1)sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].c==1&&sb[i].tp==0 )nans+=(nans==cc),sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].a==1&&sb[i].tp==0 ) {
nans+=(nans==cc);
break;
}
ans=min(ans,nans);
nans=1;
for(int i=1; i<=n; i++)sb[i].tp=0;
for(int i=1; i<=n; i++)if(sb[i].c==1)sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].a==1&&sb[i].tp==0 )nans+=(nans==cc),sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].b==1&&sb[i].tp==0 ) {
nans+=(nans==cc);
break;
}
ans=min(ans,nans);
nans=1;
for(int i=1; i<=n; i++)sb[i].tp=0;
for(int i=1; i<=n; i++)if(sb[i].c==1)sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].b==1&&sb[i].tp==0 )nans+=(nans==cc),sb[i].tp=1;
cc=nans;
for(int i=1; i<=n; i++)if(sb[i].a==1&&sb[i].tp==0 ) {
nans+=(nans==cc);
break;
}
ans=min(ans,nans);
cout<<ans;
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...