文章目录
A. Rook
题意:
给出车在国际象棋棋盘中的位置,输出其可到达的坐标(不必在意顺序)。车可以横着或竖着走任意格数。
题解:
简单模拟,没什么好说的。
代码:
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N],b[N];
void solve(){
string s;
cin>>s;
for(int i=1;i<=8;i++){
if(s[1]!=(char)(i+'0')) cout<<s[0]<<i<<endl;
}
for(int i=0;i<8;i++){
if(s[0]!=(char)i+'a') cout<<(char)(i+'a')<<s[1]<<endl;
}
}
signed main(){
int t;
cin>>t;
while(t--) solve();
return 0;
}
B. YetnotherrokenKeoard
题意:
Polycarp的笔记本键盘坏了。现在,当他按下 b b b 键时,它的行为类似于退格键:删除已输入字符串中最后一个小写字母。如果已输入字符串中没有小写字母,则完全忽略该按键。类似地,当他按下 B B B键时,它删除已输入字符串中最后一个大写字母。如果已输入字符串中没有大写字母,则完全忽略该按键。给定一个按键序列,输出处理所有按键后的结果。
题解:
遍历整个字符串,分别用两个优先队列存储当前字符串的大写字母和小写字母,每次遍历到 b b b或者 B B B,对对应的优先队列进行出队操作,并在对应的序号上打上标记,最后遍历字符串,对没有标记的并且不是 b / B b/B b/B字符输出即可。
代码:
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
const int N=1e6+10;
int temp[N];
void solve(){
string s;
cin>>s;
priority_queue<int> q1,q2;
int sz=s.size();
for(int i=0;i<=sz;i++) temp[i]=0;
for(int i=0;i<sz;i++){
if(s[i]=='b'&&!q1.empty()){
temp[q1.top()]=1;
q1.pop();
continue;
}
if(s[i]=='B'&&!q2.empty()){
temp[q2.top()]=1;
q2.pop();
continue;
}