QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#493192#4912. WereYouLastCloudWings100 ✓6183ms5124kbC++141.1kb2024-07-26 21:16:382024-07-26 21:16:38

Judging History

你现在查看的是最新测评结果

  • [2024-07-26 21:16:38]
  • 评测
  • 测评结果:100
  • 用时:6183ms
  • 内存:5124kb
  • [2024-07-26 21:16:38]
  • 提交

answer

/*
* Time Spent: 
	0. Expect: min
	1. Idea: 
	2. Code: 
* Solution: 
	Tag: 
	https://www.cnblogs.com/CloudWings/p/18324122
* Summary: 
*/
bool query (int);
void modify (int, bool);
bool WereYouLast (int n, int m) {
	if (m == 10) {  // 只有 10 位不够维护奇偶性,但是题目允许每次修改 10 个 bit,那就直接维护 n 了
		int pos = 0;
		for (int i = 1; i <= m; i++)
			pos = (pos<<1) | query(i);
		if (++pos == n) return 1;
		for (int i = m; i && pos; i--, pos >>= 1)
			modify(i, pos & 1);
		return 0;
	}
	int len = 0, pos = 0;
	while (n) len++, n >>= 1;
	len--;
	for (int i = 1; i <= 5; i++)
		pos = (pos<<1) | query(i);
	if (++pos == (1<<5)) return 1;
	if (query(5+pos)) {
		modify(5+pos, 0);
		int t = pos;
		for (int i = 5; i && t; i--, t >>= 1)
			modify(i, t&1);
	} else {
		if (pos == len) {  // 第 n-1 次打个特殊标记。
			for (int i = 1; i <= 5; i++)
				modify(i, 1);
		} else {
			modify(5+pos, 1);
			for (int i = 1; i <= 5; i++)
				modify(i, 0);
		}
	}
	return 0;
}
/*
g++ _1.cpp -o _1 -O2 -std=c++11 -DLOCAL; ./_1.exe
*/

詳細信息

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 1ms
memory: 3816kb

input:

1024 10

output:

12345876 10 10

result:

ok Correct Answer.
C1 = 10.
C2 = 10.

Subtask #2:

score: 20
Accepted

Test #2:

score: 20
Accepted
time: 3ms
memory: 4932kb

input:

65536 100000

output:

12345876 6 6

result:

ok Correct Answer.
C1 = 6.
C2 = 6.

Subtask #3:

score: 30
Accepted

Test #3:

score: 30
Accepted
time: 90ms
memory: 4912kb

input:

1048576 100000

output:

12345876 6 6

result:

ok Correct Answer.
C1 = 6.
C2 = 6.

Subtask #4:

score: 40
Accepted

Test #4:

score: 40
Accepted
time: 6183ms
memory: 5124kb

input:

67108864 100000

output:

12345876 6 6

result:

ok Correct Answer.
C1 = 6.
C2 = 6.