首页 > 其他分享 >Living-Dream 系列笔记 第20期

Living-Dream 系列笔记 第20期

时间:2024-03-03 18:44:05浏览次数:15  
标签:Living pq 20 ... int 队首 mid 队列 Dream

Problem

T1

/*
思路:
统计每个人成绩的出现人次,
然后贪心地按分数值域从大到小扫描一遍,
每次令答案累加上当前分数出现的人次,
若答案>=k就停止扫描并输出即可。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,k,a[2031];
int cnt,ans;
int mp[131];

signed main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i],mp[a[i]]++;
    for(int i=120;i>=0&&ans<k;i--) 
        ans+=mp[i];
    cout<<ans;
    return 0;
}

T2

/*
思路:
二分最大边长,对于猜到的mid,遍历n块巧克力,计算能分成的块数,与k比较即可。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,k;
int maxh=-1e9,maxw=-1e9;
int h[100031],w[100031];

bool check(int x){
    int res=0;
    for(int i=1;i<=n;i++) res+=(h[i]/x)*(w[i]/x);
    return res>=k;
}

signed main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++) 
		cin>>h[i]>>w[i],maxh=max(maxh,h[i]),maxw=max(maxw,w[i]);
	int l=-1,r=min(maxh,maxw)+1;
	while(l+1<r){
		int mid=(l+r)>>1;
		if(check(mid)) l=mid;
		else r=mid;
	}
	cout<<l;
	return 0;
}

T3

/*
思路:
二分要买的冰棍数,对于猜到的mid,模拟买冰棍的过程并计算能吃到的冰棍数,与n比较即可。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;

bool check(int x){
	int sum=x,mg=x,bg=0;
	while(1){ 
		mg+=bg;
		if(mg<3) break;
		sum+=mg/3,bg=mg/3,mg%=3;
	}
	return sum>=n;
}

signed main(){
	cin>>n;
	//cout<<check(14);
	int l=0,r=n+1;
	while(l+1<r){
		//cout<<l<<' '<<r<<'\n';
		int mid=(l+r)>>1;
		if(check(mid)) r=mid;
		else l=mid;
	}
	cout<<r;
	return 0;
}

T4

/*
思路:
题目实际上是让我们在一个n*n的矩阵中找最小的n个数,如下表:
a[1]+b[1] a[1]+b[2] a[1]+b[3] ... a[1]+b[n]
a[2]+b[1] a[2]+b[2] a[2]+b[3] ... a[2]+b[n]
...       ...       ...       ... ...
a[n]+b[1] a[n]+b[2] a[n]+b[3] ... a[n]+b[n]
于是我们想到建立一个优先队列,维护最小的n个数,初始值为第一行的数。
对于矩阵中的每一个不是第一行的数a[i]+b[j],
考虑将其替换优先队列中的最大值:
若a[i]+b[j]>=优先队列的队首,则直接剔除队首,并且跳过这一行的所有数;
(为什么可以这样做呢?
因为矩阵中的每一个行/列都是单调不降的,
若a[i]+b[j]>=优先队列的队首,
则这一行在它后面的元素都一定>=优先队列的队首,
所以无需考虑后面的。)
否则,剔除队首,并且加入a[i]+b[j]。
最后用一个栈倒序存储优先队列的元素,并输出即可。

时间复杂度分析:
第一行的进队次数为n;
第二行的a[2][n/2]的元素有a[2][1~n/2]这n/2个元素<=它,
且有a[1][1~n/2]这n/2个元素也<=它,共n个元素;
此时它应当是优先队列的队首,
而a[2][n/2+1]一定>=它,于是后面的都会被排除,
因此第二行的进队次数至多为n/2;
同理第三行的进队次数至多为n/3;
于是我们得到了:第i行的进队次数至多为n/i,
因此n行的进队次数总和至多为n+n/2+n/3+...+1,
俗称调和级数,大约为O(logn)。
而优先队列的每次操作均为O(logn),
所以总的时间复杂度为O(n(logn)^2)。
*/
#include<bits/stdc++.h>
using namespace std;

int n,a[100031],b[100031];
priority_queue<int> pq; //优先队列
stack<int> stk; //用于倒序的栈

int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            int x=a[i]+b[j]; //取出当前元素
            if(pq.size()<=n) pq.push(x); //大小不够n直接加入
            else{
                if(x>=pq.top()){ pq.pop(); break; } //>=队首的直接剔除队首并跳过当前行
                else pq.pop(),pq.push(x); //否则剔除队首并将当前元素加入优先队列
            }
        }
    while(!pq.empty()) stk.push(pq.top()),pq.pop(); //倒序
    while(!stk.empty()) cout<<stk.top()<<' ',stk.pop();
    return 0;
}

标签:Living,pq,20,...,int,队首,mid,队列,Dream
From: https://www.cnblogs.com/XOF-0-0/p/18050469

相关文章

  • 2024AcWing蓝桥杯集训·每日一题-差分
    1.[AcWing4262.空调]题目描述FarmerJohn的\(N\)头奶牛对他们牛棚的室温非常挑剔。有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。FarmerJohn的牛棚包含一排\(N\)个牛栏,编号为\(1…N\),每个牛栏里有一头牛。第\(i\)头奶牛希望她的牛栏中的温度是\(p_i\),而现......
  • 蓝桥杯2020决赛:试题 I 奇偶覆盖
    原题如果不考虑奇偶性,其实就是扫描线的板子。考虑如何处理奇偶:首先在线段树存两个变量\(len_1\)以及\(len_2\),分别表示奇长度和偶长度。再用\(sum\)记录当前两个端点之间被覆盖了多少次。然而我们无法直接获得每一个子区间的具体覆盖数目。所以从奇偶性的特点方面入手。......
  • LNOI2024游记
    Day--inf害怕,听说要带枕头和睡袋,(乐;Day--2发烧了,不想开学Day-0还在烧,在校写完作业就看ybt,听说是Linux系统,火树练习使用;Day-1早上6点多起的,困,测了体温还是很奇怪,不管了,去考试;在门口碰见了同学,进了考场,拿到了准考证,44号,很奇怪的数字;开考,与vscode进行友好的交互。失......
  • JSOI2024 游记
    本文使用CCBY协议发布。Day0(2024.3.1)坐高铁到达南京。路上打了SA-IS,感觉全忘光了。/kk签到时被教练带着转了一圈NFLS。捡到了一张社保卡。还到签到处的时候发现是某位老师的。rp++。试机时紧急搜了将CapsLock映射为Ctrl的方法。setxkbmap-optionctrl:nocapsD......
  • 20211121杨博川《密码工程》1、2章笔记
    一二章笔记@目录一二章笔记第1章密码学研究范围思维导图知识概述1.1密码学作用1.2木桶原理1.3对手设定1.4专业偏执狂1.5威胁模式1.6密码学不是唯一解决方案1.7密码学是非常难的1.8密码学是简单的部分1.9通用攻击1.10安全性和其他设计准则1.11更多阅读材料1.12专业偏执狂练习第2......
  • P1040 [NOIP2003 提高组] 加分二叉树
    原题链接题解计算分数是搜索存储前缀注意细节code#include<bits/stdc++.h>usingnamespacestd;#definelllonglongllsco[35][35]={0};stringpre[35][35];lla[35]={0};queue<ll>q;inlinevoidread(ll&x){x=0;llflag=1;charc=getch......
  • 算法模板 v1.9.1.20240303
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • LTSC2021安装Windows Terminal
    Microsoft.VCLibs.x64.14.00.DesktopAdd-AppPackage.\Microsoft.VCLibs.x64.14.00.Desktop.appxMicrosoft.UI.XamlAdd-AppPackage.\Microsoft.UI.Xaml.2.8.x64.appxWindowsTerminalAdd-AppxPackage.\Downloads\Microsoft.WindowsTerminal_1.19.10573.0_8wekyb3d8......
  • $20240303$ 随机好题
    \(20240303\)随机好题CF40E引理1:若答案不为\(0\),则\(n,m\)同奇偶。证明:每行、列都是\(1\),那么考虑把每个数乘起来。有\((-1)^n=(-1)^m\)。所以\(n\equivm(\bmod2)\)引理2:在引理1的条件下,若已确定所有列满足条件,一行之外的所有行也满足条件,那么该行也满足。......
  • JXOI2024 游记
    上洛谷打个卡,大凶,我只能说我不迷信这种东西。8:30开考,等着去考场。火大,T1没写完,T2写了个12的部分分,T3没写。是我菜了。下午越来越火大,再加上没有带耳机,更火大了。晚上收到了zaochen的外出邀请,但是我在师大里面,特别不方便,于是作罢。(这还是我第一次收到别校OIer的邀......