Codeforces Global Round 12 AB
A - Avoid Trygub
题意
重排列给定字符串,要求重排列后不能出现子串 “trygub”。
思路
把所有的 ‘b’ 先全部输出,再输出剩下的字符。
代码
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI acos(-1)
using namespace std;
typedef pair<int, int> P;
typedef long long ll;
const int N = 1e5 + 19;
const ll mod = 1e9 + 7;
char str[N];
int main()
{
int T;
cin >> T;
while(T--)
{
int n;
cin >> n;
cin >> str;
for(int i = 0; i < n; i++)
{
if(str[i] == 'b')
cout << 'b';
}
for(int i = 0; i < n; i++)
{
if(str[i] != 'b')
cout << str[i];
}
cout << endl;
}
return 0;
}
B - Balls of Steel
题意
有 n n n 个点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) (x_1, y_1), (x_2, y_2), \dots, (x_n, y_n) (x1,y1),(x2,y2),…,(xn,yn) ,每个点可以将所有其他在 k k k 的曼哈顿距离内的点全部吸收到自己所在的点。问对于给定位置的 n n n 个点和 k k k ,能否把所有点都吸收到同一点?
思路
只有有一个点能吸收所有的点,才能满足题意。开始的时候没有注意 k k k 的值是不变的,还考虑了很久特殊情况, k k k 值固定的情况下就必然要有一个点能吸收所有其他点。数据范围不大,暴力即可。
代码
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define PI acos(-1)
using namespace std;
typedef pair<int, int> P;
typedef long long ll;
const int N = 1e2 + 19;
const ll mod = 1e9 + 7;
struct node
{
ll x, y;
} a[N];
int n, k;
ll dis(int i, int j)
{
return abs(a[i].x - a[j].x) + abs(a[i].y - a[j].y);
}
bool ok(int i)
{
for(int j = 0; j < n; j++)
{
if(dis(i, j) > k)
return 0;
}
return 1;
}
bool YES()
{
for(int i = 0; i < n; i++)
{
if(ok(i))
return 1;
}
return 0;
}
int main()
{
int T;
cin >> T;
while(T--)
{
cin >> n >> k;
for(int i = 0; i < n; i++)
{
cin >> a[i].x >> a[i].y;
}
if(YES())
{
cout << 1 << endl;
}
else
{
cout << -1 << endl;
}
}
return 0;
}