cf - 670C Cinema(预处理)
题目链接:http://codeforces.com/contest/670/problem/C
#include <iostream> #include <cstdio> #include <map> #include <algorithm> #define MAX 200005 using namespace std; /************************************************************************************************************** 题意: N个科学家要去看电影,每个科学家只懂得一种语言。电影有两个语言:原声和字幕。 选择一个片子使得能听懂原声的科学家数最大化,如果有多种可能,选取字幕最大化的那一个片子。 输出片子的序号 思路: 直接sort按原声数最大,字幕数第二排序即可。添加预处理存好每种语言的科学家人数,不预处理会超时 **************************************************************************************************************/ map<int,int> Map; struct Node{ int au,sub; }node[MAX]; int main() { int n; while(cin>>n){ Map.clear(); int temp; for(int i = 1;i <= n;i ++){ scanf("%d",&temp); Map[temp]++; } int m; scanf("%d",&m); for(int i = 1;i <= m;i ++) scanf("%d",&node[i].au); int Max1,Max2; Max1 = Max2 = 0; int id = 1; for(int i = 1;i <= m;i ++){ scanf("%d",&node[i].sub); if (Map[node[i].au] > Max1 || (Map[node[i].au] == Max1 && Map[node[i].sub] > Max2)){ Max1 = Map[node[i].au]; Max2 = Map[node[i].sub]; id = i; } } cout<<id<<endl; } return 0; }