好!
上分了!
下次不用打 Div.2 了!
好吧讲正题啦(没切 D 真是太不爽了)
A:AB Balance
题意:给出一个只包含 A B 的字符串 S S S ,要求用最小的步数使其变成合法。
合法:字符串 S S S 所包含的 AB 和 BA 个数相同。
考虑将 AB 视作 +1 , 将 BA 视作 -1 ,那么就是要求整串的和是 0 ,所以 合法 当且仅当 开头和结尾相同。
#include<bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fd(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
const int N=110;
int T,n;
char s[N];
int main(){
scanf("%d",&T);
while(T--){
scanf("%s",s+1);
n=strlen(s+1);
if(s[1]!=s[n])s[1]=(s[1]=='a'?'b':'a');//完全可以直接写成 s[1]=s[n]
printf("%s\n",s+1);
}
return 0;
}
B:Update Files
题意:有 n n n 个电脑,每次可以将至多 m m m 个电脑的数据转移到另外 m m m 个电脑里,不能同时接收两个或同时接收发送,问最少用多少次可以把所有数据放到一个电脑里。
每次把最左边的 m m m 个放到最右边 m m