P15413 [CCC 2019 J4/S1] Flipper 翻转 题解
P15413 [CCC 2019 J4/S1] Flipper 翻转
题目描述
你在验光师那里等待时试图打发时间。你注意到有一个包含四个数字的网格:
| 111 | 222 |
|---|---|
| 333 | 444 |
你看到很多镜子和镜片,于是想知道如果对这个网格进行水平或垂直翻转,会发生什么变化。
- 一次“水平翻转”(沿水平方向的中心线翻转)会变成:
| 333 | 444 |
|---|---|
| 111 | 222 |
- 一次“垂直翻转”(沿垂直方向的中心线翻转)会变成:
| 222 | 111 |
|---|---|
| 444 | 333 |
你的任务是:在进行一系列水平和垂直翻转之后,确定最终网格的排列。
输入格式
输入为一行字符串,长度至少 111 个字符,最多 1,000,0001,000,0001,000,000 个字符。
每个字符是:
H——表示一次水平翻转V——表示一次垂直翻转
对于 151515 分中的 888 分,输入长度最多 100010001000 个字符。
输出格式
输出最终网格的排列。
输出两行,每行两个整数,数字之间用一个空格分隔。
输入输出样例 #1
输入 #1
HV
输出 #1
4 3
2 1
输入输出样例 #2
输入 #2
VVHH
输出 #2
1 2
3 4
说明/提示
翻译来源:GPT 5.2。
思路
直接模拟即可。
代码见下
#include<bits/stdc++.h>
using namespace std;
long long a[105][105];
string s;
int main(){
cin>>s;
a[1][1]=1;
a[1][2]=2;
a[2][1]=3;
a[2][2]=4;
for(int i=0;i<s.size();i++){
if(s[i]=='H'){
swap(a[1][1],a[2][1]);
swap(a[1][2],a[2][2]);
}
else{
swap(a[1][1],a[1][2]);
swap(a[2][1],a[2][2]);
}
}
cout<<a[1][1]<<" "<<a[1][2]<<endl;
cout<<a[2][1]<<" "<<a[2][2]<<endl;
return 0;
}

浙公网安备 33010602011771号