找規律:String Change

String change

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 370    Accepted Submission(s): 166


Problem Description
In this problem you will receive two strings S1 and S2 that contain only lowercase letters.
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.
 

Input
There are several cases.The first line of the input is a single integer T (T <= 41) which is the number of test cases.Then comes the T test cases .

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.
 

Output
For each case,output "Case #X: " first, X is the case number starting from 1.If it is possible change S1 to S2 output "YES",otherwise output "NO".
 

Sample Input
3 ab ba bac ddb aaabb cbccd
 

Sample Output
Case #1: NO Case #2: YES Case #3: YES
Hint
For the first case,it's impossible to change "ab" to "ba" . For the second case,swap(S1[0],S1[2])->swap(S1[1],S1[2]),meanwhile:bac->dac->ddb. For the third case,swap(S1[0],S1[3])->swap(S1[1],S1[2])->swap(S1[2],S1[3])->swap(S1[3],S1[4]), meanwhile:aaabb->caabb->cbbbb->cbccb->cbccd.
 

Author
miketc@UESTC_Goldfinger
 

Source


這個題完全是找規律= =。

當長度爲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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章