题目
略
分析
这道题数据范围这么小,模拟就是n*n*n,然后加一个映射可以优化一个n变成log2n
就当练习一下map吧
代码
#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
string s[15],a;
int np,ngi,m;
map<string,int>mp;
int main()
{
//freopen("in.txt","r",stdin);
scanf("%d",&np);
for(int i=1;i<=np;i++)
{
cin>>s[i];
mp[s[i]]=0;
}
for(int i=1;i<=np;i++)
{
cin>>a;
//cout<<a<<endl;
scanf("%d%d",&m,&ngi);
if(ngi==0)continue;//除法之前要判断
mp[a]-=m-((m%ngi));
int ad=m/ngi;
for(int j=1;j<=ngi;j++)
{
cin>>a;
mp[a]+=ad;//map居然还有这种操作
}
}
for(int i=1;i<=np;i++)
cout<<s[i]<<" "<<mp[s[i]]<<endl;
return 0;
}
收获
- 除法、取余之前必须判断除数是否为0,同时这正是一种程序异常退出的可能
- map的奇怪操作看代码注释
- 好生看题,第一次题目没看清楚手算样例都是错的,同时手算样例也是检查题目理解正误的好办法