这次的Rating凉了………………
这次出乎T3意料的考了交互题,虽然很简单,但卡了我好久……
T4考了一个神奇的东西,我用骗分大法水了过去……
一看排名发现有快3000人得了1000分,所以我成功的排在了4000多名…………
Task A - Last Letter
题目大意:输出最后一个字符
…………
Code
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
char ch;
for(int i = 1; i <= n; i++)
cin >> ch;
cout << ch;
return 0;
}
Task B - Go Straight and Turn Right
题目大意:给你n个操作,走一步或向右转,问最后在哪
模拟即可
Code
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
char ch;
int x = 0, y = 0;
int now = 1;//1东2南3西4北
for(int i = 1; i <= n; i++){
cin >> ch;
if(ch == 'S'){
if(now == 1)
x++;
if(now == 2)
y--;
if(now == 3)
x--;
if(now == 4)
y++;
}
else{
now++;
if(now == 5)
now = 1;
}
}
cout << x << " " << y;
return 0;
}
Task C - Yamanote Line Game
题目大意:跟你玩一个游戏,每个人再 1 至 2 * n + 1 之间选一个数,不能重复选,你先选
我第一次做交互题,现学了fflush的用法,TLE了n次,后来突然就过了。
Code
#include<iostream>
#include<cstdio>
using namespace std;
bool f[2005] = {false};
int main(){
int n;
scanf("%d", &n);
fflush(stdout);
int cnt = 0;
for(int i = 1; i <= n + 1; i++){
cnt++;
while(f[cnt] == true && cnt <= 2 * n + 1)cnt++;
fflush(stdout);
printf("%d\n", cnt);
f[cnt] = true;
fflush(stdout);
int x;
scanf("%d", &x);
f[x] = true;
fflush(stdout);
}
return 0;
}
Task D - Swap Hats
题目大意:给你两个三的全排列,问第一个经过 10^18 次变化能否变成另一个,一次变化是指交换两个数
可以把第一个看作 1 2 3,第二个相应的看成一个全排列,只有6种情况,随机打表后提交,再根据测试结果修正即可
理论最多提交次数:6次
实际次数:4次
#include<iostream>
using namespace std;
char ch[4];
int t[4] = {0};
int main(){
char c;
for(int i = 1; i <= 3; i++)
cin >> c, ch[i] = c;
for(int i = 1; i <= 3; i++){
cin >> c;
for(int j = 1; j <= 3; j++)
if(ch[j] == c)
t[i] = j;
}
int ans = t[1] * 100 + t[2] * 10 + t[3];
if(ans == 123)cout << "Yes";//ok
if(ans == 132)cout << "No";//ok
if(ans == 213)cout << "No";//ok
if(ans == 231)cout << "Yes";
if(ans == 312)cout << "Yes";
if(ans == 321)cout << "No";
return 0;
}