UVA 10887 Concatenation of Languages
2014-08-20 19:22
288 查看
题目大意:
问两种类型的单词一共能够组成多少种不同的单词。
解决方法:
字符串hash
我的代码:
#include <cstdio>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>
#define seed 131
#define ull signed long long
#define maxn 1600
using namespace std;
char sn[maxn][maxn],sm[maxn][maxn];
ull sn1[maxn],sm1[maxn];
int sn2[maxn],sm2[maxn];
ull base[maxn*3],ub[maxn*maxn];
int n,m;
int solve(){
int ans=0,totl=0;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++){
ub[totl++]=sn1[i]*base[sm2[j]]+sm1[j];
//cout<<i<<" "<<j<<endl;
//cout<<sn1[i]<<" "<<sm1[i]<<endl;
//cout<<ub[totl-1]<<endl;
}
sort(ub,ub+totl);
for (int i=0;i<totl;i++){
if (!i) ans++;
else if (ub[i]!=ub[i-1]) ans++;
else ;
}
return ans;
}
int main (){
//freopen("test.in","r",stdin);
base[0]=1;
for (int i=1;i<maxn*3;i++)
base[i]=base[i-1]*seed;
int T,t=1;scanf("%d",&T);
while (T--){
printf("Case %d: ",t++);
scanf("%d%d",&n,&m);gets(sn[0]);
for (int i=0;i<n;i++) {
gets(sn[i]);
sn2[i]=strlen(sn[i]);sn1[i]=0;
for (int j=0;j<sn2[i];j++)
sn1[i]=sn1[i]*seed+sn[i][j];
}
for (int i=0;i<m;i++) {
gets(sm[i]);
sm2[i]=strlen(sm[i]);sm1[i]=0;
for (int j=0;j<sm2[i];j++)
sm1[i]=sm1[i]*seed +sm[i][j];
}
printf("%d\n",solve());
}
return 0;
}
问两种类型的单词一共能够组成多少种不同的单词。
解决方法:
字符串hash
我的代码:
#include <cstdio>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>
#define seed 131
#define ull signed long long
#define maxn 1600
using namespace std;
char sn[maxn][maxn],sm[maxn][maxn];
ull sn1[maxn],sm1[maxn];
int sn2[maxn],sm2[maxn];
ull base[maxn*3],ub[maxn*maxn];
int n,m;
int solve(){
int ans=0,totl=0;
for (int i=0;i<n;i++)
for (int j=0;j<m;j++){
ub[totl++]=sn1[i]*base[sm2[j]]+sm1[j];
//cout<<i<<" "<<j<<endl;
//cout<<sn1[i]<<" "<<sm1[i]<<endl;
//cout<<ub[totl-1]<<endl;
}
sort(ub,ub+totl);
for (int i=0;i<totl;i++){
if (!i) ans++;
else if (ub[i]!=ub[i-1]) ans++;
else ;
}
return ans;
}
int main (){
//freopen("test.in","r",stdin);
base[0]=1;
for (int i=1;i<maxn*3;i++)
base[i]=base[i-1]*seed;
int T,t=1;scanf("%d",&T);
while (T--){
printf("Case %d: ",t++);
scanf("%d%d",&n,&m);gets(sn[0]);
for (int i=0;i<n;i++) {
gets(sn[i]);
sn2[i]=strlen(sn[i]);sn1[i]=0;
for (int j=0;j<sn2[i];j++)
sn1[i]=sn1[i]*seed+sn[i][j];
}
for (int i=0;i<m;i++) {
gets(sm[i]);
sm2[i]=strlen(sm[i]);sm1[i]=0;
for (int j=0;j<sm2[i];j++)
sm1[i]=sm1[i]*seed +sm[i][j];
}
printf("%d\n",solve());
}
return 0;
}
相关文章推荐
- UVA - 10887 Concatenation of Languages
- Uva 10887:Concatenation of Languages(Hash)
- UVa 10887 - Concatenation of Languages
- UVa 10887 - Concatenation of Languages
- UVa 10887 - Concatenation of Languages
- UVA 10887 - Concatenation of Languages
- uva 10887 - Concatenation of Languages
- UVA - 10887 Concatenation of Languages
- UVA - 10887 Concatenation of Languages(hash)
- UVa 10887 - Concatenation of Languages
- uva 10887 Concatenation of Languages(STL set)
- UVa 10887-Concatenation of Languages JAVA
- uva 10887 Concatenation of Languages
- uva 10887 - Concatenation of Languages
- uva 10887 Concatenation of Languages
- uva 10887 - Concatenation of Languages
- UVa 10887 - Concatenation of Languages
- UVa 10887 - Concatenation of Languages
- UVA 10887 Concatenation of Languages
- UVA 10887 Concatenation of Languages