Codeforces Round 937 (Div. 4)

又没打好QWQ

雪之下!

img

A

直接判就行

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
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define frep(i, a, n) for (int i = a; i >= n; i--)
#define ll long long
#define int long long
int n;
const int N=1e6+100;
int a[N];
void Totoro()
{
int a,b,c;
cin>>a>>b>>c;
if(a<b&&b<c)
{
cout<<"STAIR"<<'\n';
}
else if(a<b&&b>c)
{
cout<<"PEAK"<<'\n';
}
else{
cout<<"NONE"<<'\n';
}
}
signed main()
{
int t;
cin>>t;
while(t--)
{
Totoro();
}
return 0;
}


B

记录可能会出现的两个子串

直接取个中间值异或然后输出

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
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define frep(i, a, n) for (int i = a; i >= n; i--)
#define ll long long
#define int long long
int n;
void Totoro()
{
int n;
cin>>n;
string s="";
rep(i,1,n)
{
if(i&1)
s+="##";
else
{
s+="..";
}
}
string w="";
rep(i,1,n)
{
if(i&1)
{
w+="..";
}
else
{
w+="##";
}
}
bool flag=1;
for(int i=1;i<=n;i++)
{
if(flag)
{
cout<<s<<'\n';
cout<<s<<'\n';
}
else
{
cout<<w<<'\n';
cout<<w<<'\n';
}
flag^=1;
}


}
signed main()
{
int t;
cin>>t;
while(t--)
{
Totoro();
}
return 0;
}

C

注意0 0变成 1 2

其他的应该没什么

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
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define frep(i, a, n) for (int i = a; i >= n; i--)
#define ll long long
#define int long long
int n;
const int N=1e6+100;
int a[N];
void Totoro()
{
string s;
cin>>s;
string x;
if((s[0]-'0')*10+s[1]-'0'>=12)
{
x="PM";
int y=(s[0]-'0')*10+s[1]-'0';
y-=12;
int d=y%10;
int f=y/10;
s[0]=f+'0';
s[1]=d+'0';
if(s[0]=='0'&&s[1]=='0')
{
s[0]='1';
s[1]='2';
}
}
else
{
if(s[0]=='0'&&s[1]=='0')
{
s[0]='1';
s[1]='2';
}
x="AM";
}
cout<<s<<' '<<x<<'\n';



}
signed main()
{
int t;
cin>>t;
while(t--)
{
Totoro();
}
return 0;
}

D

数据范围不大

打个个位数,十位数,百位数,以此类推的表即可

打表时候神经了

wa 2(反思)

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
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define frep(i, a, n) for (int i = a; i >= n; i--)
#define ll long long
#define int long long
int n;
const int N=1e6+100;
int g[100]={1000,1100,1210,1010,1110,1100,1210,1331,1111,1221,1,10,11,100,110,121,101,111,1000,1001,1010,1011,1100,1101,1110,1111,10000,10010,10100,10110,11000,11010,11100,11110,11000,11011,11110,11121,12100,12111,12210,12221,10000,11000,12100,10100,11100,11000,12100,13310,11110,12210,12100,13310,14641,12221,13431,10100,11110,12221,10201,11211,11100,12210,13431,11211,12321,10000,10001,10010,10011,10100,10101,10110,10111,11000,11001,11010,11011,11100,11101,11110,11111,10100,10011,10110,11000,11010,11100,11110,11000,11011,11110,11121,12100,12111,12210,12221,100000};
int a[15]={10,11};
int b[100]={1000 ,1001, 1010 ,1011,1100,1101,1110,1111,1210,1331,1210,1221};
int c[100]={1,10,11,100 ,121 ,101 ,110 ,14641,10201,12100,12321,111,1000 ,1001, 1010 ,1011,1100,1101,1110,1111,1210,1331,1210,1221,10000,10010,10100,10110,11000,11010,11100,11110,12100,13310,12100,12210,0,11000,11011,11110,11121,12100,12111,12210,12221,13310,14641,13310,13431,100000};
void Totoro()
{
cin>>n;
rep(i,0,99)
{
if(g[i]==n)
{
cout<<"YES"<<'\n';
return ;
}
}
cout<<"NO"<<'\n';


//10 11
//100 121 101 110 111
//1000 1001 1010 1011,1100,1101,1110,1111,1210,1331,1210,1221
//







}
signed main()
{
int t;
cin>>t;
while(t--)
{
Totoro();
}
return 0;
}

E

首先一定得是因数

这样字符串才能合理加到相等,第一步就是求解因数

然后直接暴力求子串

注意要求第一个可以的,还有第二个可以的

参见样例(可能会有hrhuhuhu这种样例)

(最Nt的是我输出在输入前面,导致WA 2)

样例一没报出来()

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
94
95
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define frep(i, a, n) for (int i = a; i >= n; i--)
#define ll long long
#define int long long
int n;
const int N=1e6+100;
int a[N];
int b[N];
void Totoro()
{
int n;
cin>>n;
string s;
cin>>s;
if(n==1||n==2)
{
cout<<1<<'\n';
return ;
}
s=" "+s;
int cnt=0;
rep(i,1,sqrt(n))
{
if(n%i==0)
{
a[++cnt]=i;
if((n/i)!=i)
{
a[++cnt]=n/i;
}
}
}
sort(a+1,a+1+cnt);
int ans=0;
string y;
rep(i,1,cnt)
{
string x=s.substr(1,a[i]);
x=" "+x;
int g=0;
for(int j=1;j<=n;j++)
{
if(s[j]!=x[j%a[i]?j%a[i]:a[i]])
{
g++;
if(g>=2)
{
break;
}
}
}
if(g<=1)
{
ans=a[i];
cout<<ans<<'\n';
return ;
}
if(a[i]!=n)
{
string y=s.substr(a[i]+1,a[i]);
y=" "+y;
g=0;
for(int j=1;j<=n;j++)
{
if(s[j]!=y[j%(a[i])?j%a[i]:a[i]])
{
g++;
if(g>=2)
{
break;
}
}
}
if(g<=1)
{
ans=a[i];
cout<<ans<<'\n';
return ;
}
}
}
cout<<ans<<'\n';
}
signed main()
{
int t;
cin>>t;
while(t--)
{
Totoro();
}
return 0;
}

F

观察得到a+1==c

不然不满足

其次填2比填1优秀

会使得下一层节点多1

因此优先填2即可。

当当前层为0,就跳到下一层

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
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define frep(i, a, n) for (int i = a; i >= n; i--)
#define ll long long
int n;
void Totoro()
{
int a, b, c;
cin >> a >> b >> c;
if (a + 1 != c) {cout << -1 << '\n'; return;}
if (a + b + c == 1) {cout << 0 << '\n'; return;}
int curr = 1, next = 0, res = 1;
for (int i = 0; i < a + b; i++) {
if (!curr)
{
swap(next, curr);
res++;
}
//跳到下一层,高度++
curr--;
next++;
//先填一个
if (i < a) {next++;}
//可以填两个那自然好
}
cout << res << '\n';
}
signed main()
{
int t;
cin>>t;
while(t--)
{
Totoro();
}
return 0;
}


img