LA_3213Ancient Cipher( 排序,hash )
来源:互联网 发布:linux常用命令cat 编辑:程序博客网 时间:2024/06/02 16:26
题意:一對字符串各有n個大寫字母,如果能組合出一個映射表的話則输出YES,否則NO.分析:簡單題,可以先對組字符串每個字符出現次數進行統計,然後排序,接着比較,時間複雜度O(n).Code:#include <set>#include <map>#include <cmath>#include <ctime>#include <stack>#include <queue>#include <deque>#include <vector>#include <cstdio>#include <bitset>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;#define DIR 4#define DIM 2#define STATUS 2#define MAXM 30#define MAXN 1000 + 10#define oo (~0u)>>1#define INF 0x3F3F3F3F#define REPI(i, s, e) for(int i = s; i <= e; i ++)#define REPD(i, e, s) for(int i = e; i >= s; i --)static const double EPS = 1e-5;int hasha[MAXM], hashb[MAXM];char stra[MAXN], strb[MAXN];int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGE freopen("test.in", "r", stdin);#endif while( ~scanf("%s %s", stra, strb) ) { memset(hashb, 0, sizeof(hashb)); memset(hasha, 0, sizeof(hasha)); int la = strlen(stra)-1; int lb = strlen(strb)-1; REPI(i, 0, la) { hasha[stra[i]-'A'] += 1; } REPI(i, 0, lb) { hashb[strb[i]-'A'] += 1; } sort(hasha, hasha+MAXM); sort(hashb, hashb+MAXM); int flag = 0; REPI(i, 0, MAXM-1) { if( hasha[i] != hashb[i] ) { flag = 1; break; } } if( !flag ) { printf("YES\n"); continue; } printf("NO\n"); } return 0;}