1042 Shuffling Machine
普通模拟即可,注意每一次交换牌的时候需要更新start数组(当前卡牌的顺序),并且清空ans数组(交换后的卡牌顺序)
#include<bits/stdc++.h>
using namespace std;
const int N = 54;
int start[N + 1],ans[N + 1],a[N + 1];
char mp[5] = {'S','H','C','D','J'};
int main() {int k; cin >> k;for(int i = 1; i <= N; i++) start[i] = i;for(int i = 1; i <= N; i++) cin >> a[i];for(int i = 1; i <= k; i++){for(int j = 1; j <= N; j++) ans[a[j]] = start[j];for(int j = 1; j <= N; j++){start[j] = ans[j];ans[j] = 0;} }for(int i = 1; i <= N; i++){char ch = mp[(start[i] - 1) / 13];cout << ch << (start[i]-1) % 13 + 1;if(i < N) printf(" ");}return 0;
}
1050 String Subtraction
题目大意:
题目解析:
题目的意思就是输出s1字符串每个单词(根据空格分开)的每个字符的不含有s2中的字符的字符串(每一个单词按空格分开)
只需要用map记录一下,注意判断空格,遇到空格,不能直接输出空格,需要判断s2中是否有空格,没有在输出,否则会出现格式错误。
#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
map<char, int> mp; // 使用 char 作为键
int main() {string s1, s2;getline(cin, s1); // 使用 getline 读取 string 类型的输入getline(cin, s2);// 将 s2 中的所有字符存入 map,值设为 1for(int i = 0; i < s2.size(); i++){mp[s2[i]] = 1;}// 遍历 s1 并输出不在 s2 中的字符for(int i = 0; i < s1.size(); i++){if(s1[i] == ' '){if(!mp[s1[i]]) cout << " "; // 如果当前字符是空格,直接输出空格continue; // 继续下一个字符的处理}if(!mp.count(s1[i])) cout << s1[i]; }return 0;
}