Anigram单词(51Nod-1095)
生活随笔
收集整理的這篇文章主要介紹了
Anigram单词(51Nod-1095)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
一個單詞a如果通過交換單詞中字母的順序可以得到另外的單詞b,那么定義b是a的Anigram,例如單詞army和mary互為Anigram。另:相同的2個單詞不算Anigram。現在給定一個字典,輸入Q個單詞,從給出的字典中找出這些單詞的Anigram。
輸入
第1行:1個數N,表示字典中單詞的數量。(1 <= N <= 10000)
第2 - N + 1行,字典中的單詞,單詞長度 <= 10。
第N + 2行:查詢的數量Q。(1 <= Q <= 10000)
第N + 3 - N + Q - 2行:用作查詢的單詞,單詞長度 <= 10。
輸出
共Q行,輸出Anigram的數量,如果沒有輸出0。
輸入樣例
5
add
dad
bad
cad
did
3
add
cac
dda
輸出樣例
1
0
2
思路:使用 map 排序后暴力查詢即可
源程序
#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #define E 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD=7; const int N=50000+5; const int dx[]= {-1,1,0,0}; const int dy[]= {0,0,-1,1}; using namespace std;string str[10005]; int main(){int n;scanf("%d",&n);map<string,int> mp1;map<string,int> mp2;for(int i=1; i<=n; i++) {cin>>str[i];mp1[str[i]]++;sort(str[i].begin(),str[i].end());mp2[str[i]]++;}int q;scanf("%d",&q);string word;for(int i=1; i<=q; i++) {string word,temp;cin>>word;temp=word;sort(word.begin(),word.end());printf("%d\n",max(mp2[word]-mp1[temp],0));}return 0; }?
總結
以上是生活随笔為你收集整理的Anigram单词(51Nod-1095)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 训练日志 2019.1.16
- 下一篇: 计算几何 —— 欧拉公式