------------恢复内容开始------------
第一题A题:
这就是个签到题,判断一下x%y是否为0,不为零,则给x+(y-x%y)的值就好了。
#include<map> #include<stdlib.h> #include<iostream> #include<vector> #include<string> #include<algorithm> #include<cstring> #include<queue> #include<stack> #include<cmath> #include<cstdio> using namespace std; const int maxn = 1e6 + 10; #define ll long long const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; int main() { int t; cin >> t; while (t--) { int x, y; cin >> x >> y; int m = x % y; if (m == 0)cout << m << endl; else { m = y - m; cout << m << endl; } } }
B题:
给我们n个字母,其中n-2个a,和2个b,给我们一个顺序规律,让我们找出第k个的字符串,并输出;
规律就是假设我们反向看,可以发现是有一层一层的,第一层只有1个,第二层有2个,比如我们假设总共5个字母,第一层就是aaabb,第二层就是aabab,aabba,所以我们可以吧k拆分成
看他是第几层的,然后余数就是第几个了。
#include<map> #include<stdlib.h> #include<iostream> #include<vector> #include<string> #include<algorithm> #include<cstring> #include<queue> #include<stack> #include<cmath> #include<cstdio> using namespace std; const int maxn = 1e6 + 10; #define ll long long const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; int main() { int t; cin >> t; while (t--) { int x, y; cin >> x >> y; int sum = 0; for (int i = 1;; i++) { if (y <= i)break; y -= i; sum = i; } sum++; y--; for (int i = 1; i <= x; i++) { if (i == x - sum || i == x - y) { cout << "b"; } else { cout << "a"; } } cout << endl; } }
C题:
给我们一个三进制的数字,让我们拆分成2个数,保证两个数中最大的数要最小;
简单的说,我们就通过遍历,先把2拆成1,如果碰到第一个1开始我们就要开始操作了,首先我们先把第一个1分给第一个数字,然后接下来所有的数都分给第二个数,这样就可以保证题目的要求了;
#include<map> #include<stdlib.h> #include<iostream> #include<vector> #include<string> #include<algorithm> #include<cstring> #include<queue> #include<stack> #include<cmath> #include<cstdio> using namespace std; const int maxn = 5e4 + 10; #define ll long long const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; char a[maxn]; char x1[maxn], x2[maxn]; int main() { int t; cin >> t; while (t--) { int n; cin >> n; cin >> a; int flag = 0; for (int i = 0; i < n; i++) { if (a[i] == '2') { if (flag == 0) { x1[i] = '1'; x2[i] = '1'; } else { x1[i] = '0'; x2[i] = '2'; } } else if (a[i] == '1') { if (flag == 0) { x1[i] = '1'; x2[i] = '0'; flag = 1; } else { x1[i] = '0'; x2[i] = '1'; } } else { x1[i] = '0'; x2[i] = '0'; } } for (int i = 0; i < n; i++) { cout << x1[i]; } cout << endl; for (int i = 0; i < n; i++) { cout << x2[i]; } cout << endl; } }
D题:
以后再补
------------恢复内容结束------------