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;}

原创粉丝点击