Codeforces 625(Div.2)

  |  

A题

题意:输入两组数,为1表示有该任务,0表示没有,现在由你定义每个任务的分数,使得最高分最小的情况下,第一个人的总分大于第二个人,如果无法满足,输出-1。

思路:这道题的话,先处理两个人的特有任务,如果第一个人特有的任务第二个人都有,那么一定无法满足,因为两个人任务的分数是相同的,第二个人特有的任务按照题目要求,应当为1分,第一个人的特有任务,按照第二个人特有任务的数量,平均分配即可。

AC代码:

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
#include <bits/stdc++.h>
typedef long long ll;
const int maxx = 100010;
const int inf = 0x3f3f3f3f;
using namespace std;
int a[maxx];
int b[maxx];
int main()
{
int n;
while (cin >> n)
{
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
cin >> b[i];
int ans1 = 0, ans2 = 0;
for (int i = 1; i <= n; i++)
{
if (a[i] + b[i] == 1)
{
ans1 += a[i];
ans2 += b[i];
}
}
if (ans1 == 0)
cout << "-1" << endl;
else
cout << (ans1 + ans2) / ans1 << endl;
}
return 0;
}

B题

题意 :有n个数,对于Ai和Aj这两个数,如果满足Ai-Aj=i-j,那么两个数就可以求和,输出整个数组能够求和的最大值。

思路:这道题的话,因为每个城市有beauty值b,可以相互连通的城市i和j之间 i-j==b[i]-b[j],所以i-b[i]==j-b[j],所以可以连通的所有城市i-b[i]都是相等的,所以我们记录可以给到每一个差值的beauty值之和再取max就可以了。

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
typedef long long ll;
const int maxx = 200010;
const int inf = 0x3f3f3f3f;
using namespace std;
unordered_map<ll, ll> mp;
int main()
{
int n;
cin >> n;
ll a;
ll ans = -1;
for (ll i = 1; i <= n; i++)
{
cin >> a;
mp[a - i] += a;
ans = max(ans, mp[a - i]);
}
cout << ans << endl;
return 0;
}

C题

题意:一个字符串,如果与某个位置相邻的字母,至少有一个比该位置的字母小1,那么该位置的字母就可以删掉,剩下的字母接上来,输出对于整个字符串,最多可以删多少个字母。

思路:这道题的话,直接暴力,不难想到先删字母大的,然后再删小的可以保证删的最多,所以就从 ‘z’ 遍历到 ‘a’, 一个一个删,当前字母不能删就往前循环。

AC代码:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <bits/stdc++.h>
typedef long long ll;
const int maxx = 200010;
const int inf = 0x3f3f3f3f;
using namespace std;
string s;
int main()
{
int n;
while (cin >> n >> s)
{
for (char i = 'z'; i >= 'b'; i--)
{
if (s.size() == 1)
break;
while (1)
{
if (s.size() == 1)
break;
int flag = 1;
for (int j = 0; j < s.size(); j++)
{
if (s[j] != i)
continue;
if (j == 0)
{
if (s[j + 1] == i - 1)
{
flag = 0;
s.erase(s.begin() + j, s.begin() + j + 1);
break;
}
}
else if (j == s.size() - 1)
{
if (s[j - 1] == i - 1)
{
flag = 0;
s.erase(s.begin() + j, s.begin() + j + 1);
break;
}
}
else
{
if (s[j - 1] == i - 1 || s[j + 1] == i - 1)
{
flag = 0;
s.erase(s.begin() + j, s.begin() + j + 1);
break;
}
}
}
if (flag)
break;
}
}
cout << n - s.size() << endl;
}
return 0;
}

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,
字数统计:87.6k 载入天数...载入时分秒...