HDU 2946 Letter Cookies

来源:互联网 发布:卡通头像软件app 编辑:程序博客网 时间:2024/05/16 09:10
http://acm.hdu.edu.cn/showproblem.php?pid=2946
题目大意是:给你T个盒子,每个盒里面有一堆字符,然后W次询问,每次询问一个单词,是否能用那一堆字符拼出这个单词,如果能拼出则输出YES 否则NO ,拼过一个单词后字母放回盒子。
优化后的代码

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<iomanip>
#include<list>
#include<deque>
#include<map>
#include <stdio.h>
#include <queue>

#define maxn 10000+5
#define ull unsigned long long
#define ll long long
#define reP(i,n) for(i=1;i<=n;i++)
#define rep(i,n) for(i=0;i<n;i++)
#define cle(a) memset(a,0,sizeof(a))
#define mod 90001
#define PI 3.141592657
#define INF 1<<30
const ull inf = 1LL << 61;
const double eps=1e-5;

using namespace std;

bool cmp(int a,int b){
return a>b;
}

char s[1001];
int m,n,i,j;
int mp1[26],mp2[26];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&n);
while(n--)
{
cle(mp1);
scanf("%s",&s);
for(i=0;s[i];i++)
mp1[s[i]-'A']++;
scanf("%d",&m);
while(m--)
{
cle(mp2);
scanf("%s",&s);
for(i=0;s[i];i++)
{
mp2[s[i]-'A']++;
}
for(j=0;j<26;j++)if(mp2[j]>mp1[j])break;
if(j==26)printf("YES\n");
else printf("NO\n");
}
}
return 0;
}


没优化代码

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<iomanip>
#include<list>
#include<deque>
#include<map>
#include <stdio.h>
#include <queue>

#define maxn 10000+5
#define ull unsigned long long
#define ll long long
#define reP(i,n) for(i=1;i<=n;i++)
#define rep(i,n) for(i=0;i<n;i++)
#define cle(a) memset(a,0,sizeof(a))
#define mod 90001
#define PI 3.141592657
#define INF 1<<30
const ull inf = 1LL << 61;
const double eps=1e-5;

using namespace std;

bool cmp(int a,int b){
return a>b;
}
map<char,int>mp;
map<char,int>mp2;
char s[1010];
int m,mark,n;
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d",&n);
while(n--)
{
mp.clear();
cin>>s;
for(int j=0;j<strlen(s);j++)
mp[s[j]]++;
scanf("%d",&m);
char t[110];
for(int i=1;i<=m;i++)
{
cin>>t;
mark=0;
mp2.clear();
for(int k=0;k<strlen(t);k++)
mp2[t[k]]=mp[t[k]];
for(int j=0;j<strlen(t);j++)
{
mp2[t[j]]--;
if(mp2[t[j]]<0){mark=1;break;}
}
if(!mark)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}


这题没什么算法但还是学习到了很多东西。
0 0
原创粉丝点击