bzoj1923[Sdoi2010]外星千足虫

本文介绍了bzoj1923[Sdoi2010]外星千足虫的问题背景及求解思路,通过设置动物脚数的系数并运用异或方程解决该问题,提供了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bzoj1923[Sdoi2010]外星千足虫

题意:

n只两种动物,一种有奇数只脚,另一种偶数只角。现在进行m次操作,每次告诉你若干只动物的脚数之和为奇数还是偶数。要求你输出所有动物的类型以及最少多少次操作就能判断。n≤1000,m≤10000

题解:

设放进去的动物的系数为1,没放的系数为0,脚数如果是奇数结果就为1,偶数结果为0,解异或方程,具体看代码。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <bitset>
 5 #define inc(i,j,k) for(int i=j;i<=k;i++)
 6 #define maxn 1010
 7 using namespace std;
 8 
 9 bitset <maxn> M[maxn*2]; int n,m,ans; char s[maxn];
10 void gause(){
11     int now=0,pos;
12     inc(i,1,n){
13         for(pos=now+1;pos<=m&&!M[pos][i];pos++); if(pos==m+1){ans=-1; return;}else ans=max(ans,pos);
14         now++; swap(M[now],M[pos]); inc(j,1,m)if(j!=now&&M[j][i])M[j]^=M[now];
15     }
16 }
17 int main(){
18     scanf("%d%d",&n,&m);
19     inc(i,1,m){scanf("%s",s+1); inc(j,1,n)M[i][j]=s[j]-'0'; int a; scanf("%d",&a); M[i][n+1]=a;}
20     gause();
21     if(ans==-1)printf("Cannot Determine");else{
22         printf("%d\n",ans); inc(i,1,n)printf(M[i][n+1]?"?y7M#\n":"Earth\n");
23     }
24     return 0;
25 }

 

20160616

转载于:https://www.cnblogs.com/YuanZiming/p/5779882.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值