0%

CF-994-C. MEX Cycle

思路讲解

我想到一个背景故事,就是说每条龙都想有和自己的朋友不同的涂装,但是编号越大的涂装越贵,龙龙们想用编号比较小的涂装达成这一目的,但是龙龙们不知道怎样组合才好,于是找到了你。

AC代码

多用构造之方法,少用特判之方法,毕竟是构造题嘛。

https://codeforces.com/contest/2049/submission/300064440

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <cstring>
#include <algorithm>
#include <deque>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <bitset>
#include <iterator>
#include <random>
#include <iomanip>
#include <cctype>
#include <array>

typedef long long ll;
const ll MAXN=static_cast<ll>(2e5)+10;
ll N,X,Y,T;
ll A[MAXN];

inline bool isOriginalFriend(ll x,ll y){
x-=1;
y-=1;
if((x+1)%N==y){
return true;
}else if((x-1)%N==y){
return true;
}
return false;
}

void solve(){
std::cin>>N>>X>>Y;
if(N%2==0){
for(int i=1;i<=N;++i){
A[i]=i%2;
}
}else{
A[1]=2;
for(int i=2;i<=N;++i){
A[i]=(i+1)%2;
}
}
// 无影响,我们使用普通的方法
if(A[X]==A[Y]){
// 有影响,我们要调整
if(N%2==0){
A[X]=2;
}else{
A[X]=2;
for(int i=X+1;i<=X+N-1;++i){
if(i<=N){
A[i]=(i+X%2)%2;
}else{
A[i%N]=(i+X%2)%2;
}
}
}
}
for(int i=1;i<=N;++i){
std::cout<<A[i]<<" ";
}
std::cout<<std::endl;
return;
}

int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);std::cout.tie(0);
std::cin>>T;
while (T--) {
solve();
}
return 0;
}
/*
AC https://codeforces.com/contest/2049/submission/300064440
WA https://codeforces.com/contest/2049/submission/300052744
1
5 3 5

2 1 2 1 0 (A[2]=1,但应该是0)

WA https://codeforces.com/contest/2049/submission/300055526
1
5 2 4

1
7 3 7

*/

心路历程(WA,TLE,MLE……)

WA https://codeforces.com/contest/2049/submission/300052744
1
5 3 5
2 1 2 1 0 (A[2]=1,但应该是0)