目录
A题:
代码:
#include <iostream>
using namespace std;
int main()
{
int a;
char x;
cin >> a;
for(int i = 0; i < a; i++) cin >> x;
cout << x;
return 0;
}
题意:
输入N和一个长度为N的字符串,输出字符串的最后一个字符
思路:
没啥好说的,输入字符串,输出最后一个字符
B题:
代码:
#include <iostream>
#include <cstring>
using namespace std;
int x, y, n;
char face;
string s;
int main()
{
face = 'e';
cin >> n;
cin >> s;
for(int i = 0; i < n; i++)
{
if(s[i] == 'S')
{
if(face == 'e') x++;
else if(face == 'w') x--;
else if(face == 'n') y++;
else y--;
}
else
{
if(face == 'e') face = 's';
else if(face == 's') face = 'w';
else if(face == 'w') face = 'n';
else face = 'e';
}
}
cout << x << " " << y;
return 0;
}
题意:
输入一个N和一个长度为N的字符串,字符串由若干个S和R组。
高桥一开始在一个平面直角坐标系的原点处,面向东。
对于每一个字符,如果其为S,高桥向前一格,如果为R,高桥向右转90°
输出高桥最后的位置
思路:
模拟即可。
可以设置一个变量标记高桥面向的位置。
C题:
代码:
#include <iostream>
#include <map>
using namespace std;
map<int, bool> num;
int n, id = 1;
int main()
{
cin >> n;
while(n)
{
while(num[id]) id++;
cout << id << endl;
cout.flush();
num[id] = true;
cin >> n;
num[n] = true;
}
return 0;
}
题意:
高桥、青木依次报数,数值范围为1~2n+1, 不可重复报数,先报不出来者输。
思路:
这题还是很简单的。num为标记,记录已经被报的数,id从小到大遍历1~2n+1,找出下一个可以报的数。当接收到0,结束程序。唯一的坑点就是输出过后要写`cout.flush()`。总体来说没什么难度。
D题:
代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string a, b, c, x, y, z;
cin >> a >> b >> c >> x >> y >> z;
string f = a+b+c;
if(f == x+y+z || f == z+x+y || f == y+z+x) cout << "Yes";
else cout << "No";
return 0;
}
题意:
三个人分别带着颜色为a, b, c的三顶帽子,再10¹⁸次交换后,三个人的帽子颜色能否变为x,y,z。(a, b, c, x, y, z分别为RGB中的一个字母)
思路:
这其实也是一道大水题,只要确定abc在偶数次交换后可以变成xyz即可。人肉暴力一下,发现只有三种情况(详见代码)