A - Last Letter
题意: 给你一串字符串,输出字符串的最后一位
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 200010;
int n;
string s;
int main()
{
cin >> n;
cin >> s;
cout << s[n - 1];
return 0;
}
B - Go Straight and Turn Right
题意: 考虑一个xy平面。x轴的正方向朝东,y轴的正方向朝北。高桥初始位置为(x, y) = (0, 0),面朝东方(x轴的正方向)。
给定一个长度为N的字符串T=t1t2…tN,由S和R组成。高桥将按照以下顺序执行每一步操作,i=1,2,…,N。
如果ti=S,则高桥沿当前方向前进1个单位距离。
如果ti=R,则高桥顺时针旋转90度,但不改变位置。结果是高桥的方向发生以下改变:
如果旋转前面向东方(x轴的正方向),旋转后会面向南方(y轴的负方向)。
如果旋转前面向南方(y轴的负方向),旋转后会面向西方(x轴的负方向)。
如果旋转前面向西方(x轴的负方向),旋转后会面向北方(y轴的正方向)。
如果旋转前面向北方(y轴的正方向),旋转后会面向东方(x轴的正方向)。
打印出高桥在执行以上所有步骤之后所处的坐标。
思路: 先写出方向偏移量const int dx[4] = {1, 0, -1, 0}; const int dy[4] = {0, -1, 0, 1};然后在模拟即可
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010, INF = 0x3f3f3f3f, Mod = 998244353;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, -1, 0, 1};
char s[N];
int n;
int x = 0, y = 0, u = 0;
int main()
{
cin >> n >> s + 1;
for(int i = 1; i <= n; i ++)
{
if (s[i] == 'R')
{
u = (u + 1) % 4;
}
else
{
x += dx[u];
y += dy[u];
}
}
cout << x << ' ' << y << endl;
return 0;
}
C - Yamanote Line Game
题意: Takahashi和Aoki将相互对战以下游戏。
从Takahashi开始,两人交替宣布一个介于1到2N+1(包括边界)之间的整数,直到游戏结束。任何一个玩家宣布的整数都不能由任何一方再次宣布。不能宣布整数的那一方输掉游戏;没有输掉的一方获胜。
在这个游戏中,Takahashi总是会获胜。你的任务是代表Takahashi玩游戏,并赢得比赛。
思路: 第一次遇见这种交互题,一开始有点懵0.0,读懂题意后,因为2 * n + 1是奇数 又因为B先输出 所以B一定能获胜,然后发现一个方法就是:B每次直接找[1, 2 * n + 1]中没有被输出的数输出即可
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 200010;
bool st[1010];
int n, x;
int main()
{
cin >> n;
cout << 1 << '\n';
st[1] = 1;
for(int i = 1; i <= n + 1; i ++)
{
cin >> x;
if(x == 0) return 0;
st[x] = 1;
for(int i = 1; i <= 2 * n + 1; i ++)
{
if(st[i] == false)
{
st[i] = 1;
cout << i << endl;
break;
}
}
}
return 0;
}