QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#493194#4912. WereYouLastlifan100 ✓6197ms5000kbC++141.1kb2024-07-26 21:18:042024-07-26 21:18:05

Judging History

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

  • [2024-07-26 21:18:05]
  • 评测
  • 测评结果:100
  • 用时:6197ms
  • 内存:5000kb
  • [2024-07-26 21:18:04]
  • 提交

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
*/

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

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

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: 6ms
memory: 5000kb

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: 91ms
memory: 4996kb

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: 6197ms
memory: 4976kb

input:

67108864 100000

output:

12345876 6 6

result:

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