Codeforces Round #525 (Div. 2)

题面:https://codeforces.com/contest/1088/problems
a了三题,但是出题速度被碾压。1h30min左右才出了C。最后可能rating不会怎么变吧。
希望能以后能a题快一点吧。

A. Ehab and another construction problem

题意:签到
解法:输出两个x

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
using namespace std;
pii a[2000];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int x;
cin >> x;
if(x == 1)
cout << -1 << endl;
else
cout << x << ' ' << x << endl;
return 0;
}

B. Ehab and subtraction

题意:给定一个长度为$n$的数组。进行$k$次操作,每次找出数组中最小的正整数。并将数组中所有元素减去这个数,如果没有正整数了输出0。
解法:排个序,记录每次减去了多少,从小到大处理,最后处理需要输出几个0即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
using namespace std;
const int maxn = 2e5 + 10;
ll a[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
int i = 0, time = 0;
ll sub = 0;
while(a[i] == 0)
i++;
for(int j = i; j <= n; j++)
{
while(a[j] - sub <= 0 && j <= n)
j++;
if(j == n + 1) break;
cout << a[j] - sub << endl;
time++;
if(time == k)
break;
sub += a[j] - sub;
}
while(time < k)
{
time++;
cout << 0 << endl;
}
return 0;
}

C. Ehab and a 2-operation task

题意:一个长度为$n$的数组,有两种操作,第一种是将前$i$个元素各加上一$x$,第二种是将前$i$个元素取模$x$。进行不多于$n + 1$次操作最后使得所有的元素严格递增。
解法:构造
从后向前构造,使得最后的结果取模n为$0, 1, 2…..n-1$即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
using namespace std;
const int maxn = 1e4 + 10;
ll a[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
cout << n + 1 << endl;
ll mod = n + 1;
for(int i = n; i >= 1; i--)
{
ll temp = (1 + a[i] / mod) * mod + i;
ll add = temp - a[i];
cout << "1 " << i << ' ' << add << endl;
for(int j = 1; j <= i; j++)
{
a[j] += add;
a[j] %= mod;
}
}
cout << "2 " << n << ' ' << n + 1 << endl;
return 0;
}