------------恢复内容开始------------
第一题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题:
以后再补
------------恢复内容结束------------