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

Living-Dream 系列笔记 第24期

时间:2024-03-03 18:46:24浏览次数:23  
标签:24 Living cnt cow int sum long cold Dream

Problem

T1

/*
思路:
暴力枚举所有的和,用桶标记每个和出现的次数,找最大值且编号最小即可。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int s1,s2,s3;
int sum=-1e9,ans;
int mp[131];

signed main(){
	ios::sync_with_stdio(0);
	cin>>s1>>s2>>s3;
	for(int i=1;i<=s1;i++)
		for(int j=1;j<=s2;j++)
			for(int k=1;k<=s3;k++)
				mp[i+j+k]++;
	for(int i=1;i<=131;i++)
		if(sum<mp[i])
			sum=mp[i],ans=i;
	cout<<ans;
	return 0;
}

T2

/*
思路:
对于每一个关键点,循环判断其是否在某个轰炸范围内,记录次数和最后一次轰炸即可。
注意输出格式。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int m,n; 
struct point{
	int x,y,xx,yy;
}a[2031];

signed main(){
	ios::sync_with_stdio(0);
	cin>>m>>n;
	for(int i=1;i<=m;i++)
		cin>>a[i].x>>a[i].y>>a[i].xx>>a[i].yy;
	for(int i=1,xxx,yyy;i<=n;i++){
		cin>>xxx>>yyy;
		string pd="NO"; int last=0,cnt=0;
		for(int j=1;j<=m;j++)
			if(xxx>=a[j].x&&xxx<=a[j].xx&&yyy>=a[j].y&&yyy<=a[j].yy)
				pd="YES",last=j,cnt++;
		if(pd=="NO") cout<<pd<<'\n';
		if(pd=="YES") cout<<pd<<' '<<cnt<<' '<<last<<'\n';
	}
	return 0;
}

T3

/*
思路:
因为k有着十分明显的单调性,所以我们考虑二分答案。
最naive的check方式:
对于每个位置,每次取台上表演时间最小的牛,
将此位置的时间累加上它的跳舞时间,
最后在每个位置上的时间取max和tmax比较即可。
然后我们发现这样每次循环每个位置找最小值很慢,
所以我们考虑使用优先队列优化这一过程,
具体来说:
首先将前k头牛的跳舞时间加入队列,
并且记录z,表示上一头牛的结束时间;
再循环k+1~n头牛,不断将总时间累加上当前牛所需要的时间(即pq.top()-z)。
然后记录z=队首,并弹出队首;
最后舞台上还剩k头牛,再循环k次不断弹出队首,
并向上面一样更新z和总时间,
最后将总时间与tmax比较即可。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,tmax;
int d[10031];

bool check(int x){
    int z=0,maxt=0;
	priority_queue<int,vector<int>,greater<int> > pq;
	for(int i=1;i<=x;i++) pq.push(d[i]);
	for(int i=x+1;i<=n;i++){
	   maxt+=pq.top()-z,z=pq.top();
       pq.pop(),pq.push(d[i]+z); 
	}
	while(x--){
	    maxt+=pq.top()-z,z=pq.top();
        pq.pop();
	}
	return maxt<=tmax; 
}

signed main(){
	ios::sync_with_stdio(0);
	cin>>n>>tmax;
	for(int i=1;i<=n;i++) cin>>d[i];
	
	int l=0,r=n+1;
	while(l+1<r){
		int mid=(l+r)>>1;
		if(check(mid)) r=mid;
		else l=mid;
	}	
	cout<<r;
	return 0;
}

T4

/*
思路:
考虑进行深搜,枚举出所有空调的组合方式,在这些组合方式中寻找合法且代价最少的即可。
如何判断合法性?我们仅需在读入时用桶将每个牛栏区间内的温度都累加ci,
最后在合法性验证中,对于每个空调,将每个区间的温度都减去pi,
最后判断每个区间温度都<0即可。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,m,ans=1e9;
int tmp[31];
int t[131],tt[131];
bool vis[31];
struct cow{
	int s,t,c;
}cow[31];
struct cold{
	int a,b,p,m;
}cold[31];

bool check(int tot){
	for(int i=1;i<=131;i++) tt[i]=t[i];
	for(int i=1;i<=tot;i++)
		for(int j=cold[tmp[i]].a;j<=cold[tmp[i]].b;j++)
			tt[j]-=cold[tmp[i]].p;
	for(int i=1;i<=131;i++) 
		if(tt[i]>0) return 0;
	return 1;
}
void dfs(int x,int cnt,int sum){
	if(x==m+1){
		if(check(cnt)) ans=min(ans,sum);
		return;
	}
	
	tmp[cnt+1]=x;
	dfs(x+1,cnt+1,sum+cold[x].m);
	
	dfs(x+1,cnt,sum);
}

signed main(){
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>cow[i].s>>cow[i].t>>cow[i].c;
		for(int j=cow[i].s;j<=cow[i].t;j++) t[j]+=cow[i].c;
	}
	for(int i=1;i<=m;i++)
		cin>>cold[i].a>>cold[i].b>>cold[i].p>>cold[i].m;
	dfs(1,0,0);
	cout<<ans;
	return 0;
}

标签:24,Living,cnt,cow,int,sum,long,cold,Dream
From: https://www.cnblogs.com/XOF-0-0/p/18050458

相关文章

  • Living-Dream 系列笔记 第21期
    ProblemT1/*思路:枚举二元组(i,j),依次检验k次训练课,若i的位置总是>j或<j,则将答案累加。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intk,n,ans;inta[31][31];signedmain(){ ios::sync_with_stdio(0); cin>>k>>n; for(inti=1;i<=......
  • Living-Dream 系列笔记 第22期
    ProblemT1/*思路:因为题目要求最大水量,所以K次操作需要都用上,并且由于每次都是将x倒入x+1中,所以K次操作之后的最大水量应当是x~x+k+1之和;于是问题就转变成了求一段长度为k+1的连续子段的和的最大值,因此维护一个前缀和即可。*/#include<bits/stdc++.h>usingnamespacestd......
  • Living-Dream 系列笔记 第19期
    ProblemT1/*思路:对于每一对L,R,标记[L,R)(注意左闭右开!),并且求出最小的L(minl)和最大的R-1(maxr);循环maxl~maxr,若被标记则最长连续挤奶时间+1,最长无人挤奶时间=0;否则最长连续挤奶时间=0,最长无人挤奶时间+1,同时更新最大值。*/#include<bits/stdc++.h>usingnamespacestd;intn......
  • Living-Dream 系列笔记 第18期
    ProblemT1/*思路:令N个整数以字符串形式读入,判断其末尾是否为0、2、4、6、8,若是则为偶数,不是则为奇数。*/#include<bits/stdc++.h>usingnamespacestd;intn;stringx;//以字符串形式读入intmain(){ cin>>n; while(n--){ cin>>x; if(x[x.size()-1]=='0'||x[x.......
  • Living-Dream 系列笔记 第20期
    ProblemT1/*思路:统计每个人成绩的出现人次,然后贪心地按分数值域从大到小扫描一遍,每次令答案累加上当前分数出现的人次,若答案>=k就停止扫描并输出即可。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,k,a[2031];intcnt,ans;intmp[131......
  • 2024AcWing蓝桥杯集训·每日一题-差分
    1.[AcWing4262.空调]题目描述FarmerJohn的\(N\)头奶牛对他们牛棚的室温非常挑剔。有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。FarmerJohn的牛棚包含一排\(N\)个牛栏,编号为\(1…N\),每个牛栏里有一头牛。第\(i\)头奶牛希望她的牛栏中的温度是\(p_i\),而现......
  • 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......
  • 算法模板 v1.9.1.20240303
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • $20240303$ 随机好题
    \(20240303\)随机好题CF40E引理1:若答案不为\(0\),则\(n,m\)同奇偶。证明:每行、列都是\(1\),那么考虑把每个数乘起来。有\((-1)^n=(-1)^m\)。所以\(n\equivm(\bmod2)\)引理2:在引理1的条件下,若已确定所有列满足条件,一行之外的所有行也满足条件,那么该行也满足。......