LA3213加密
題意:
? ? ? 白書上有些題的題意說的太蛋疼了,這個(gè)題的意思是說有兩種加密方式,一種是交換位置,另一種是一一映射,交換位置是指如ABCD 可以加密成DCBA 也可以加密成ACBD就是把某些字母的位置改變了,至于是誰和誰交換隨意,而一一映射是指ADD 可以加密成 BCC但不可以加密成ABC,然后現(xiàn)在有一種新的加密方式就是前面兩個(gè)的合成版,現(xiàn)在問題來了,給你兩個(gè)字母串(只有大寫字母)問其中一個(gè)是不是由另一個(gè)經(jīng)過新的加密方式(就是那兩個(gè)方式合成在一起)加密過來的。
思路:
? ? ? 我們想一下,對于第一種加密方式,既然是可以隨意改變位置,對于給定的兩個(gè)串我們就不用考慮他們的順序了,直接統(tǒng)計(jì)每個(gè)字母的出現(xiàn)個(gè)數(shù),得到一個(gè)出現(xiàn)個(gè)數(shù)的序列,然后對于第二種加密,說是可以映射,但是映射誰我所謂只要不沖突就行,那么我們就不用管具體是那個(gè)字母出現(xiàn)了多少次,我們只要出現(xiàn)次數(shù),然后我們把兩個(gè)出現(xiàn)次數(shù)序列sort一遍,然后一一對應(yīng)比較就行了,具體細(xì)節(jié)看代碼。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int mk1[30] ,mk2[30];
char st1[110] ,st2[110];
int main ()
{
? ?int i ,l ,Ans;
? ?while(~scanf("%s" ,st1))
? ?{
? ? ? ?scanf("%s" ,st2);
? ? ? ?l = strlen(st1) - 1;
? ? ? ?memset(mk1 ,0 ,sizeof(mk1));
? ? ? ?memset(mk2 ,0 ,sizeof(mk2));
? ? ? ?for(i = 0 ;i <= l ;i ++)
? ? ? ?{
? ? ? ? ? ?mk1[st1[i] - 'A'] --;
? ? ? ? ? ?mk2[st2[i] - 'A'] --;
? ? ? ?}
? ? ? ?sort(mk1 ,mk1 + 26);
? ? ? ?sort(mk2 ,mk2 + 26);
? ? ? ?for(Ans = 0 ,i = 0 ;i <= 25 && !Ans;i ++)
? ? ? ?if(mk1[i] != mk2[i]) Ans = 1; ? ? ?
? ? ? ?!Ans ? puts("YES") : puts("NO");
? ?}
? ?return 0;
}
? ? ? ?
? ? ? 白書上有些題的題意說的太蛋疼了,這個(gè)題的意思是說有兩種加密方式,一種是交換位置,另一種是一一映射,交換位置是指如ABCD 可以加密成DCBA 也可以加密成ACBD就是把某些字母的位置改變了,至于是誰和誰交換隨意,而一一映射是指ADD 可以加密成 BCC但不可以加密成ABC,然后現(xiàn)在有一種新的加密方式就是前面兩個(gè)的合成版,現(xiàn)在問題來了,給你兩個(gè)字母串(只有大寫字母)問其中一個(gè)是不是由另一個(gè)經(jīng)過新的加密方式(就是那兩個(gè)方式合成在一起)加密過來的。
思路:
? ? ? 我們想一下,對于第一種加密方式,既然是可以隨意改變位置,對于給定的兩個(gè)串我們就不用考慮他們的順序了,直接統(tǒng)計(jì)每個(gè)字母的出現(xiàn)個(gè)數(shù),得到一個(gè)出現(xiàn)個(gè)數(shù)的序列,然后對于第二種加密,說是可以映射,但是映射誰我所謂只要不沖突就行,那么我們就不用管具體是那個(gè)字母出現(xiàn)了多少次,我們只要出現(xiàn)次數(shù),然后我們把兩個(gè)出現(xiàn)次數(shù)序列sort一遍,然后一一對應(yīng)比較就行了,具體細(xì)節(jié)看代碼。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int mk1[30] ,mk2[30];
char st1[110] ,st2[110];
int main ()
{
? ?int i ,l ,Ans;
? ?while(~scanf("%s" ,st1))
? ?{
? ? ? ?scanf("%s" ,st2);
? ? ? ?l = strlen(st1) - 1;
? ? ? ?memset(mk1 ,0 ,sizeof(mk1));
? ? ? ?memset(mk2 ,0 ,sizeof(mk2));
? ? ? ?for(i = 0 ;i <= l ;i ++)
? ? ? ?{
? ? ? ? ? ?mk1[st1[i] - 'A'] --;
? ? ? ? ? ?mk2[st2[i] - 'A'] --;
? ? ? ?}
? ? ? ?sort(mk1 ,mk1 + 26);
? ? ? ?sort(mk2 ,mk2 + 26);
? ? ? ?for(Ans = 0 ,i = 0 ;i <= 25 && !Ans;i ++)
? ? ? ?if(mk1[i] != mk2[i]) Ans = 1; ? ? ?
? ? ? ?!Ans ? puts("YES") : puts("NO");
? ?}
? ?return 0;
}
? ? ? ?
總結(jié)
- 上一篇: LA3029最大子矩阵
- 下一篇: LA3266田忌赛马