AtCoder Grand Contest 029 Solution

时间:2023-03-09 20:04:27
AtCoder Grand Contest 029 Solution

A:

Solved.

签。

 #include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 200010
char s[N]; int main()
{
while (scanf("%s", s + ) != EOF)
{
ll res = ;
int len = strlen(s + ); int last = len;
for (int i = len; i >= ; --i)
{
if (s[i] == 'B')
{
res += last - i;
--last;
}
}
printf("%lld\n", res);
}
return ;
}

B:

Solved.

签。

 #include <bits/stdc++.h>
using namespace std; #define N 200010
int n, a[N], Bit[];
unordered_map <int, int> mp; int main()
{
Bit[] = ;
for (int i = ; i <= ; ++i) Bit[i] = Bit[i - ] << ;
while (scanf("%d", &n) != EOF)
{
mp.clear();
for (int i = ; i <= n; ++i)
{
scanf("%d", a + i);
++mp[a[i]];
}
sort(a + , a + + n);
int res = ;
for (int i = n; i >= ; --i)
{
int pos = upper_bound(Bit, Bit + , a[i]) - Bit;
//cout << a[i] << " " << Bit[pos] << endl;
if (pos >= || mp[a[i]] == ) continue;
int tar = Bit[pos] - a[i];
if ((tar != a[i] && mp[tar]) || (tar == a[i] && mp[tar] > ))
{
++res;
--mp[tar];
}
--mp[a[i]];
}
printf("%d\n", res);
}
return ;
}

C:

Unsolved.

题意:
一共有n个字符串,给出每个字符串的长度,要求构造这些字符串,使得$S_1 < S_2 < \cdots < S_n$

这里的小于重载为字典序

D:

Solved.

题意:

在一个棋盘上,A只能向下走,B只能向走

刚开始一个棋子位于(1, 1)位置,有些地方有障碍物,如果有障碍物或到边界就不能走
A想要总步数最多,B想要总步数最少,双方都采用最优策略,问A最后最多能走多少步

思路:

因为A只能向下走,而且只要下面没有障碍物,他一定会向下走

那我们维护B最远能走到那里,然后一层一层往下看,如果最远能走的地方大于等于当前层某个障碍物的横坐标

那么就可以在这层让A停下来

 #include <bits/stdc++.h>
using namespace std; #define N 200010
int h, w, n;
vector <int> v[N]; int main()
{
while (scanf("%d%d", &h, &w) != EOF)
{
scanf("%d", &n);
int res = h;
for (int i = ; i <= h; ++i) v[i].clear();
for (int i = , x, y; i <= n; ++i)
{
scanf("%d%d", &x, &y);
v[x].push_back(y);
}
int far = ;
for (int i = ; i <= h; ++i)
{
if (v[i].empty())
{
++far;
continue;
}
sort(v[i].begin(), v[i].end());
if (v[i][] <= far)
{
res = i - ;
break;
}
bool flag = true;
for (auto it : v[i]) if (it == far + )
flag = false;
far += flag;
}
printf("%d\n", res);
}
return ;
}

E:

Unsolved.

题意:

在一棵树上,有一个人迷路了,在某个地方,他要回到编号为1的结点

他采用的策略是每次都选择相邻的编号最小的点去走,走不通就回溯,求最后走到结点1的步数为多少

注意输出n - 1个数,分别为当前处于第$i点,要回到1的步数$

F:

Unsolved.