当前位置: 代码迷 >> 综合 >> Gym - 101875FNumber Preference【思维】
  详细解决方案

Gym - 101875FNumber Preference【思维】

热度:9   发布时间:2024-02-24 20:47:16.0

题目

传送门
在这里插入图片描述

Input
3
1 3 1 2 3
2 1 1
1 3 1 2 4
Output
1
Input
5
1 3 1 2 3
1 3 1 2 4
1 3 1 2 5
1 3 1 2 7
2 1 8
Output
2
Input
2
1 2 10 11
2 2 10 11
Output
0

题意:给出一个数n,下面是n个人,每个人的开头有一个数1或2后面跟着一个数m,如果是一的话表示后面是这个人喜欢的m个数,否则为厌恶的m个数.问:有多少的个数是所有人都喜欢的,输出这个数.

思路:我们可以把所有人喜欢的数都存起来,再把所有人厌恶的再减去,不过要注意可能没有喜欢的只有厌恶的,这样的话用1e18减去厌恶的即可

#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<map>
#include<sstream>
#include<queue>
using namespace std;
map<long long int ,int>mp;
map<long long int,int>mpp;
long long int a[250000],b[250000];
int main()
{
    ios::sync_with_stdio(0);mp.clear();mpp.clear();long long  int l=0,r=0,g=0;int n;cin>>n;while(n--){
    int p;cin>>p;if(p==1){
    int q;g++;//喜欢数字的人数long long int x;cin>>q;// printf(" %d \n",q);for(int i=0;i<q;i++){
    cin>>x;if(mp[x]==0)a[l++]=x;//喜欢的数字mp[x]++;}}else{
    int q;long long int x;cin>>q;for(int i=0;i<q;i++){
    cin>>x;if(mpp[x]==0)b[r++]=x;//厌恶的数字mpp[x]++;}}}if(l>0)//喜欢数字的人数大于0{
    long long int s=0;for(int i=0;i<l;i++)if((mp[a[i]]==g)&&(mpp[a[i]]==0))s++;//每个人都喜欢这个数字并且没有人厌恶他printf("%lld\n",s);}else//所有的人都厌恶数字{
    long long int v=1000000000000000000;printf("%lld",v-r);}
}