时间:2016-05-06 21:24:29 星期五
题目编号:[2016-05-06][codeforces][670C - Cinema]
题目大意:
- 给n个人会的唯一语言,给m部电影,每部电影是某个语言和某个字母的,从m不电影中选择一个,为了尽可能是更多个人please,要求尽可能多的人会电影的语言,相同的时候,要尽可能多的人看懂字母
分析:
- 语言的范围是 1 - 1e9 ,但是n只有2 * 1E6种,所以使用map匹配一下对应语言的数目
- 然后每次输入一部电影,比较当前选择的电影(当前最优值),如果这部电影更好,就替换,否则不变
#include<cstdio>#include<map>using namespace std;const int maxm = 1E5 * 2 + 10;int a[maxm],b[maxm];map<int,int> qm;int main(){ int n,tmp,m; scanf("%d",&n); for(int i = 0 ; i < n ; ++i){ scanf("%d",&tmp); if(qm.find(tmp) == qm.end()){ qm[tmp] = 1; }else ++qm[tmp]; } scanf("%d",&m); for(int i = 0 ; i < m ; ++i){ scanf("%d",&a[i]); } for(int i = 0 ; i < m ; ++i){ scanf("%d",&b[i]); } int ans; pair<int,int> cnt,cur; cnt.first = cnt.second = -1; for(int i = 0; i < m ; ++i){ cur = pair<int,int>(qm[a[i]],qm[b[i]]); if( cnt < cur ){ cnt = cur; ans = i; } } printf("%d\n",ans + 1); return 0;}