zoukankan      html  css  js  c++  java
  • HDU 4357

    这道题写起来没难度,但这种题确实很难,这种字符串的题难在证明。以后也要注意。

    奇偶性不同的字符串肯定不能转换,因为每一次交换都是字符串的和增加2。

    当字符串长度为2时,可以模拟交换,最多26次。

    否则,任选三个字母(x1,x2,x3)->(x1+1,x2,x3+1)......(1)

    而且还有(x1,x2,x3)->(x1+2,x2,x3).....(2)

    对于第一种变换,可以变换到至多只有一个字母不符合的情况,由于字符串奇偶性相同,则该字母相差为偶数,可以通过第二种变换得到。

    #include <iostream>
    #include <string.h>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    
    char s1[70],s2[70];
    
    int main(){
    	int T,t=0;
    	char tmp;
    	scanf("%d",&T);
    	while(++t<=T){
    		scanf("%s",s1);
    		scanf("%s",s2);
    		int len=strlen(s1);
    		printf("Case #%d: ",t);
    		if(len==2){
    			int i;
    			for(i=0;i<26;i++){
    				tmp=s1[1];
    				s1[1]=s1[0];
    				s1[0]=tmp;
    				s1[0]=(s1[0]-'a'+1)%26+'a';
    				s1[1]=(s1[1]-'a'+1)%26+'a';
    				if(strcmp(s1,s2)==0)
    				break;
    			}
    			if(i>=26)puts("NO");
    			else puts("YES");
    		}
    		else{
    			int sum1=0,sum2=0;
    			for(int i=0;i<len;i++){
    				sum1+=(s1[i]-'a');
    				sum2+=(s2[i]-'a');
    			}
    			if(sum1%2==sum2%2)
    			puts("YES");
    			else puts("NO");
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    crontab与系统时间不一致
    MySQL构造测试数据
    【SQL优化】SQL优化工具
    mysql case when then 使用
    update没带where,寻找问题的思路
    线程池
    线程理论
    数据共享
    进程池
    管道
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4271194.html
Copyright © 2011-2022 走看看