首页 > 其他分享 > [SDOI2010] 外星千足虫

[SDOI2010] 外星千足虫

时间:2023-07-16 21:44:35浏览次数:40  
标签:xor 千足虫 int text register SDOI2010 leq 高斯消 外星

题意

现在你面前摆有 \(1\ldots N\) 编号的 \(N\) 只千足虫,你的任务是鉴定每只虫子所属的星球,但不允许亲自去数它们的足。

Charles 每次会在这 \(N\) 只千足虫中选定若干只放入“昆虫点足机”(the Insect Feet Counter, IFC)中,“点足机”会自动统计出其内所有昆虫足数之和。Charles 会将这个和数 \(\bmod\) \(2\) 的结果反馈给你,同时告诉你一开始放入机器中的是哪几只虫子。

他的这种统计操作总共进行 \(M\) 次,而你应当尽早得出鉴定结果。

假如在第 \(K\) 次统计结束后,现有数据就足以确定每只虫子的身份,你就还应将这个 \(K\) 反馈给 Charles,此时若 \(K<M\),则表明那后 \(M-K\) 次统计并非必须的。

如果根据所有 \(M\) 次统计数据还是无法确定每只虫子身份,你也要跟 Charles 讲明:就目前数据会存在多个解。

\(1\leq N\leq 10^3\),\(1\leq M\leq 2\times 10^3\)

Solution

本题要求求解

\[\begin{cases} a_1 x_1 \ \text{xor} \ a_2 x_2 \dots \text{xor} \ a_n x_n = a_{n+1} \\ b_1 x_1 \ \text{xor} \ b_2 x_2 \dots \text{xor} \ b_n x_n = b_{n+1} \\ \dots \\ c_1 x_1 \ \text{xor} \ c_2 x_2 \dots \text{xor} \ c_n x_n = c_{n+1} \\ \end{cases}\]

显然这是一个类似于高斯消元的方程组,可以考虑使用高斯消元解决,只不过由原来的加减消元转化为异或消元即可。

对于无解判断,跟原高斯消元一致,只需要判断是否存在新的 \(x_i\) 来进行消元。

而考虑到需要多少组统计数据,我们发现在高斯消元的时候会尽量的选择可供消元的 \(n\) 的方程,只需要记录下这些方程原来是第几组, 然后统计最大值即可。

不幸的是,我们发现整个过程为 \(O(n^3)\) ,我们的算法不能通过。

考虑使用 bitset ,其具有更加优秀的异或时间复杂度,或者是比较原始的说,用二进制数来表示出这些01位,然后对这些二进制进行异或运算,可以有效降低时间复杂度。

幸运的是,这个题的数据很水,我们不需要 bitset 也可以通过。

Code

点击查看代码
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e3 + 50;

inline int read() {
	register int w = 0, f = 1;
	register char c = getchar();
	while (c > '9' || c < '0') {
		if (c == '-')  f = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		w = w * 10 + c - '0';
		c = getchar();
	}
	return w * f;
}

int n, m;
int a[N << 1][N];

int main() {
	n = read(), m = read();
	for (register int i = 1; i <= m; ++i) {
		for (register int j = 1; j <= n; ++j)
			scanf("%1d", &a[i][j]);
		scanf("%d", &a[i][n + 1]);
		a[i][0] = i;
	}

	for (register int i = 1; i <= n; ++i) {
		register bool flag = false;
		for (register int j = i; j <= m; ++j)
			if (a[j][i]) {
				swap(a[i], a[j]);
				flag = true;
				break;
			}	
		if (!flag) {
			puts("Cannot Determine");
			return 0;
		}
		for (register int j = i + 1; j <= m; ++j)
			if (a[j][i])
				for (register int k = i; k <= n + 1; ++k)
					a[j][k] ^= a[i][k];
	}

	for (register int i = n ; i >= 1; --i)
		for (register int j = i - 1; j >= 1; --j)
			if (a[j][i])
				for (register int k = i; k <= n + 1; ++k)
					a[j][k] ^= a[i][k];
			
	register int ans = a[1][0];
	for (register int i = 2; i <= n; ++i)
		ans = max(ans, a[i][0]);
	
	printf("%d\n", ans);
	for (register int i = 1; i <= n; ++i)
		puts(a[i][n + 1] == 0 ? "Earth" : "?y7M#");
	return 0;
}

标签:xor,千足虫,int,text,register,SDOI2010,leq,高斯消,外星
From: https://www.cnblogs.com/abigjiong/p/17558602.html

相关文章

  • [SDOI2010] 古代猪文
    题意求下列表达式的值\(\large{g^{\sum_{d|n}{\binom{n}{d}}}\pmod{999911659}}\)其中,\(n,d\leqslant10^9.\)Solution由欧拉定理可知,\(\large{原式=g^{\sum_{d|n}{\binom{n}{d}}\pmod{999911658}}}\)显然只需要考虑分子,考虑到\(999911658\)范围下的组合数无法......
  • BZOJ 1927: [Sdoi2010]星际竞速 费用流
    1927:[Sdoi2010]星际竞速TimeLimit: 20Sec  MemoryLimit: 259MBSubmit: 2344  Solved: 1442[Submit][Status][Discuss]Description10年一度的银河系赛车大赛又要开始了。作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座α星的悠......
  • 基于 Python 开发的外星人入侵小游戏
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]玩家通过鼠标控制飞船行动和射击,若能在敌人到达游戏界面底端之前消灭所有敌人,则游戏胜利,否则游戏失败。导语写了个低配版的外星人入侵小游戏来作为19年的第一更吧~让我们愉快地开始吧~开发工具**Python版本:**3.6.4相关模块:pygame......
  • 【图论之拓扑排序】剑指 Offer II 114. 外星文字典
    剑指OfferII114.外星文字典讲解传送门constintN=26,M=N*N;classSolution{public:inth[N],e[M],ne[M],idx=0;boolst[N];intin[N],cnt=0;//上面三行要写在classSolution内部,不然每次调用不会清空voidadd(inta,intb){......
  • P2482 [SDOI2010] 猪国杀
    方法论这是一道复杂的模拟题。由于游戏规则的条目很多,我们需要仔细考虑程序的组织。否则,在编写程序的过程中极容易陷入停滞的状态(不知道下一步应该怎么做),或在发现程序出问......
  • 【洛谷】P2480 [SDOI2010]古代猪文
    原题链接题意求:\[g^{\sum_{d|n}\binom{n}{d}}\mod999911659\]\(n,g\leq10^9\)。思路:因为\(999911659\)是质数,由欧拉定理的推论,可以得到:\[g^{\sum_{d|n}\bino......
  • 题解 P2480 [SDOI2010]古代猪文
    题意求\[g^{\sum\limits_{d|n}C_n^d}\bmod999911659\]\(n,g\le10^9\)一道非常好的数论题,用到了基本所有的基础数论知识。需要使用到的数论知识欧拉定理......
  • 20220627外星人2015 R2硬盘更换记录
    外星人换硬盘太贵,自个动手丰衣足食外星人alienware15R2更换硬盘记录,参考资料为:​​​https://downloads.dell.com/manuals/all-products/esuprt_laptop/esuprt_alienwa......
  • 灵界的科学丨六、星际通信新科技──寻找外星人
    摘自李嗣涔教授《灵界的科学》外星先进文明科技领先地球的关键,是外星人掌握了意识的物理,能够制造仿照天眼的仪器,自由进出虚数空间遨游宇宙,同时创造出瞬间科技。人类......
  • 题解 P2482 【[SDOI2010]猪国杀】
    postedon2021-04-1619:58:01|under题解|source想看代码的直接跳Day6这题不能发题解,所以这是做题记录做题原因:499AC,教练推荐我切这题遗言前言:早就听说了这个......