Codeforces Round #629 (Div. 3)做题记录

------------恢复内容开始------------

第一题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题:

 以后再补

 

------------恢复内容结束------------

posted @ 2020-04-24 19:27  学习使我逍遥  阅读(123)  评论(0编辑  收藏  举报