• 小蓝书:电影


    题意

    题意

    题解

    都是用离散化的吗?这么神奇?

    我的思路就是对于(a)排序,对于语音和字幕的也分别排序,然后三个指针一起从小到大跳得到每个电影的语音和字幕能让多少个人高兴起来。

    时间复杂度:(O(nlogn+mlogm))

    代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define  N  210000
    using  namespace  std;
    int  a[N],n,m;
    struct  node
    {
    	int  x,id;
    }b[N]/*语音*/,c[N]/*字幕*/;
    struct  answer
    {
    	int  x,y;
    }d[N];
    inline  bool  cmp(int  x,int  y){return  x<y;}
    inline  bool  cmp1(node  x,node  y){return  x.x<y.x;}
    int  main()
    {
    	scanf("%d",&n);
    	for(int  i=1;i<=n;i++)scanf("%d",&a[i]);
    	scanf("%d",&m);
    	for(int  i=1;i<=m;i++)
    	{
    		scanf("%d",&b[i].x);
    		b[i].id=i;
    	}
    	for(int  i=1;i<=m;i++)
    	{
    		scanf("%d",&c[i].x);
    		c[i].id=i;
    	}
    	sort(a+1,a+n+1,cmp);
    	sort(b+1,b+m+1,cmp1);
    	sort(c+1,c+m+1,cmp1);
    	int  now=0/*表示目前是哪种编号的人*/,cnt=0,l1=1,l2=1;
    	for(int  i=1;i<=n;i++)
    	{
    		if(a[i]!=now)
    		{
    			while(b[l1].x<now  &&  l1<=m)d[b[l1++].id].x=0;
    			while(b[l1].x==now  &&  l1<=m)d[b[l1++].id].x=cnt;
    			while(c[l2].x<now  &&  l2<=m)d[c[l2++].id].y=0;
    			while(c[l2].x==now  &&  l2<=m)d[c[l2++].id].y=cnt;
    			now=a[i],cnt=1;
    		}
    		else  cnt++;
    	}
    	while(b[l1].x<now  &&  l1<=m)d[b[l1++].id].x=0;
    	while(b[l1].x==now  &&  l1<=m)d[b[l1++].id].x=cnt;
    	while(c[l2].x<now  &&  l2<=m)d[c[l2++].id].y=0;
    	while(c[l2].x==now  &&  l2<=m)d[c[l2++].id].y=cnt;
    	answer  ans;int  id=0;ans.x=ans.y=0;
    	for(int  i=1;i<=m;i++)
    	{
    		if(d[i].x>ans.x  ||  (d[i].x==ans.x  &&  d[i].y>=ans.y))id=i,ans=d[i];
    	}
    	printf("%d
    ",id);
    	return  0;
    }
    
  • 相关阅读:
    cpp 二进制文件读写
    中文词频统计
    文件方式实现完整的英文词频统计实例
    组合数据类型练习,英文词频统计实例上
    英文词频统计预备,组合数据类型练习
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作
    条件、循环、函数定义 练习
    turtle库基础练习
    Python基础练习
  • 原文地址:https://www.cnblogs.com/zhangjianjunab/p/13403755.html
Copyright © 2020-2023  润新知