QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#493191#4912. WereYouLastCloudWings82 5661ms4980kbC++141.1kb2024-07-26 21:12:202024-07-26 21:12:21

Judging History

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

  • [2024-07-26 21:12:21]
  • 评测
  • 测评结果:82
  • 用时:5661ms
  • 内存:4980kb
  • [2024-07-26 21:12:20]
  • 提交

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;
	}
	if (query(m)) return 1;
	int len = 0, pos = 0;
	while (n) len++, n >>= 1;
	len--;
	for (int i = 1; i <= 5; i++)
		pos = (pos<<1) | query(i);
	pos++;
	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 次打个特殊标记。
			modify(m, 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: 3832kb

input:

1024 10

output:

12345876 10 10

result:

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

Subtask #2:

score: 16
Acceptable Answer

Test #2:

score: 16
Acceptable Answer
time: 6ms
memory: 4980kb

input:

65536 100000

output:

12345876 7 7

result:

points 0.80 Correct Answer.
C1 = 7.
C2 = 7.

Subtask #3:

score: 24
Acceptable Answer

Test #3:

score: 24
Acceptable Answer
time: 81ms
memory: 4972kb

input:

1048576 100000

output:

12345876 7 7

result:

points 0.80 Correct Answer.
C1 = 7.
C2 = 7.

Subtask #4:

score: 32
Acceptable Answer

Test #4:

score: 32
Acceptable Answer
time: 5661ms
memory: 4976kb

input:

67108864 100000

output:

12345876 7 7

result:

points 0.80 Correct Answer.
C1 = 7.
C2 = 7.