鏈接:
http://poj.grids.cn/practice/2820
鏈接:
http://poj.grids.cn/practice/2801
為啥把這2個(gè)不相干的題目放在一起了...說實(shí)話這其實(shí)也是二個(gè)容易的題目,尤其第二個(gè)更容易想到...第一個(gè)也許暫時(shí)
沒那么容易想出來。。。
而且感覺第一個(gè)古代密碼還挺有意思的...判斷一個(gè)字符串是否能夠通過移位和替換方法加密成另外一個(gè)字符串。。。
至于第二個(gè),各位去看看題目吧。。。
也是個(gè)解法跟題目不大相關(guān)的題目。。。
這2個(gè)題最大的特點(diǎn)和共同點(diǎn)就是解法和題目意思想去甚遠(yuǎn)。。。
所以我覺得做這種二丈和尚摸不早頭腦的題,思維應(yīng)該往跟題意背離的方向思考。。。
尤其第一個(gè)題,如果只看代碼,即使代碼可讀性再好,也不知道代碼有何意義,有何目的,跟題意有啥關(guān)系。。。
不過第一個(gè)居然輕松AC了,雖然我2b得搞了個(gè)ce和re出來了...
第一個(gè)的轉(zhuǎn)換方法是,計(jì)算出現(xiàn)的字符'A'-'Z'的出現(xiàn)次數(shù),然后從大小排序,如果針對(duì)加密后的字符串得到的結(jié)果一直大于等于
加密前的字符串得到的結(jié)果,表明答案是YES...具體還是看代碼吧...
#include <stdio.h>
#include <string.h>
#include <algorithm>
using std::sort;
bool Greater(int one, int two)
{
return one > two;
}
int main()
{
char szOne[110];
char szTwo[110];
int nNumOne[26];
int nNumTwo[26];
while (scanf("%s%s", szOne, szTwo) == 2)
{
memset(nNumOne, 0, sizeof(int) * 26);
memset(nNumTwo, 0, sizeof(int) * 26);
char* psz = szOne;
while (*psz)
{
++nNumOne[*psz - 'A'];
++psz;
}
psz = szTwo;
while (*psz)
{
++nNumTwo[*psz - 'A'];
++psz;
}
sort(nNumOne, nNumOne + 26, Greater);
sort(nNumTwo, nNumTwo + 26, Greater);
bool bIsYes = true;
for (int i = 0; i < 26; ++i)
{
if (nNumOne[i] < nNumTwo[i])
{
bIsYes = false;
break;
}
}
if (bIsYes)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}