String change
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 370 Accepted Submission(s): 166
Each time you can swap any two characters of S1. After swap,both of the two letters will increase their value by one. If the previous letter is 'z',it will become 'a' after being swapped.
That is to say ,"a" becomes "b","b" becomes "c"....."z" becomes "a" and so on.
You can do the change operation in S1 as many times as you want.
Please tell us whether you can change S1 to S2 after some operations or not.
For each case,the first line is S1,the second line is S2.S1 has the same length as S2 and the length of the string is between 2 and 60.
這個題完全是找規律= =。
當長度爲2的時候特判一下,其他長度如果同奇偶就YES,否則NO
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
char str1[70], str2[70];
int num1[70], num2[70];
int main(){
int t;
int cnt = 0;
scanf("%d", &t);
while(t --){
cnt ++;
scanf("%s %s", str1, str2);
int len = strlen(str1);
for(int i = 0; i < len; i ++){
num1[i] = str1[i] - 'a' + 1;
num2[i] = str2[i] - 'a' + 1;
}
printf("Case #%d: ", cnt);
if(len == 2){
if(num1[0] - num2[0] == num1[1] - num2[1] && (num1[0] - num2[0]) % 2 == 0)
printf("YES\n");
else if(num1[0] - num2[1] == num1[1] - num2[0] && (int)abs((float)num1[0] - (float)num2[1]) % 2)
printf("YES\n");
else
printf("NO\n");
}
else{
int sum = 0;
for(int i = 0; i < len; i ++){
sum += num1[i] - num2[i];
}
if((int)abs((sum)) % 2 == 0)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}