A. Equidistant Letters
题意
你的任务是重新排列字符串中的字母,使得对于每对恰好出现两次的字母,这对中的字母之间的距离是相同的。您不得添加或删除字母。
题解
排序
代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
int _;
for(scanf("%d", &_);_;_--){
string str; cin >> str;
sort(str.begin(), str.end());
cout << str << '\n';
}
}
B. Minor Reduction
题意
代码
#include <iostream>
#include <string>
using namespace std;
int main(){
//freopen("in.txt","r",stdin);
int _;
for(scanf("%d", &_);_;_--){
string str; cin >> str;
int len = str.size();
bool judge = false;
int pos;
int ans;
for(int i = len-1; i >= 1; i--){
if (str[i] - '0' + str[i-1] - '0' >= 10) {
judge = true;
pos = i-1;
ans = str[i] - '0' + str[i-1] - '0';
break;
}
}
if (!judge){
cout << str[0] - '0' + str[1] - '0';
for(int i = 2; i < len; i++){
cout << str[i];
}
}
else {
for(int i = 0; i < len; i++){
if (i == pos){
cout << ans;
i++;
}
else{
cout << str[i];
}
}
}
cout << '\n';
}
}
C. Monsters And Spells
题意
有n个怪物,第i个怪物在第ki秒出现,并且严格 ki < ki+1,第i个怪物的血量为Hi,魔法师第i秒可以施法造成x+1或1的伤害,x为上一秒造成的伤害(属于是蓄力前摇了)
求解杀死所有怪物所需的最少法力值
题解
自测样例
输入
6
1
6
4
2
4 5
2 2
3
5 7 9
2 1 2
1
1000000000
1000000000
2
7 9
3 4
4
3 4 5 6
3 3 4 5
输出
10
6
7
500000000500000000
15
21
以上样例能够检查较为明显的错误。
由于
k
k
k秒需要
h
h
h的伤害,所以需要魔法的吟唱区间
(
k
−
h
+
1
,
k
)
(k - h + 1, k)
(k−h+1,k)
然后将重叠的区间处理即可
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/*
题意:有n个怪物,第i个怪物在第ki秒出现,并且严格 ki < ki+1,第i个怪物的血量为Hi,魔法师第i秒可以施法造成x+1或1的伤害,x为上一秒造成的伤害(属于是蓄力前摇了)
求解杀死所有怪物所需的最少法力值
*/
typedef long long ll;
const int maxn = 1000005;
struct mos
{
ll k;
ll h;
} m[maxn];
void slove(){
int n; cin >> n;
std::vector<pair<ll, ll> > v;
v.clear();
for(int i = 1; i <= n; i++) cin >> m[i].k;
for(int i = 1; i <= n; i++) cin >> m[i].h;
for(int i = 1; i <= n; i++){
v.push_back(make_pair(m[i].k - m[i].h + 1, m[i].k));
}
ll L = 0, R = -1; ll ans = 0;
sort(v.begin(), v.end());
for(int i = 0; i < n; i++){
ll l = v[i].first, r = v[i].second;
if (l <= R) R = max(r, R);
else ans += (R - L + 1) * (R - L + 2) / 2, L = l, R = r;
}
ans += (R - L + 1) * (R - L + 2) / 2;
cout << ans << '\n';
}
int main(){
//freopen("c_in.txt","r",stdin);
int _;
for(scanf("%d", &_); _; _--){
slove();
//debug
}
}