2021牛客暑期多校训练营6,签到题CFHI

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021牛客暑期多校训练营6,签到题CFHI相关的知识,希望对你有一定的参考价值。

题号 标题 已通过代码 通过率 团队的状态
A Contracting Convex Hull 点击查看 14/112 未通过
B Defend Ponyville 点击查看 4/32 未通过
C Delete Edges 点击查看 124/1120 通过(构造、规律结论)
D Gambling Monster 点击查看 61/117 未通过
E Growing Tree 点击查看 6/165 未通过
F Hamburger Steak 点击查看 933/4384 通过(贪心)
G Hasse Diagram 点击查看 49/234 未通过
H Hopping Rabbit 点击查看 300/2255 通过(扫描线)
I Intervals on the Ring 点击查看 1311/5472 通过(构造)
J Defend Your Country 点击查看 91/687 未通过
K Starch Cat 点击查看 15/219 未通过

I Intervals on the Ring

题意:

想到了每个补集区间对全集的补集相交,也想到了每次直接输出,一共m次。
但是把题目的连续区间想复杂了,重新造了每个区间到vector,所以WA了一发。

#include<bits/stdc++.h>
using namespace std;
struct node{int l, r;}a[1010];
bool cmp(node x, node y){return x.l<y.l;}

int main(){
    int T;  cin>>T;
    while(T--){
		int n, m;  cin>>n>>m;
		for(int i = 1; i <= m; i++)cin>>a[i].l>>a[i].r;
		sort(a+1,a+m+1,cmp);
		cout<<m<<"\\n";
		cout<<a[1].l<<" "<<a[m].r<<"\\n";
		for(int i = 2; i <= m; i++)
			cout<<a[i].l<<" "<<a[i-1].r<<"\\n";
    }
    return 0;
}


F Hamburger Steak

题意:

想到了最小耗时=max{max{ti}, sum{ti}/m },但是开始没有想到贪心的把每个锅的时间依次分配给汉堡, 所以开始拿每个汉堡需要的时间以及拆分到不同的锅绕了一段时间。

#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int maxn = 1e6+10;
LL a[maxn];
int main(){
    LL n, m;  cin>>n>>m;
	LL mx = 0, sum = 0;
	for(int i = 1; i <= n; i++){
		cin>>a[i]; sum += a[i]; mx=max(mx, a[i]);
	}
	LL avg = max(mx, sum/m+(sum%m!=0)), nowt=0, cnt=1;
	for(int i = 1; i <= n; i++){
		if(nowt==avg)cnt++, nowt=0;
		if(nowt+a[i]>avg){
			printf("2 %lld %lld %lld %lld %lld %lld\\n",cnt+1,0,a[i]-(avg-nowt),cnt,nowt,avg);
			nowt = a[i]-(avg-nowt); cnt++;
		}else{
			printf("1 %lld %lld %lld\\n",cnt,nowt,nowt+a[i]);
			nowt += a[i];
		}
	}
    return 0;
}


H Hopping Rabbit

题意:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5+10;

//扫描线:从左往右扫
struct Scan{ int l, r, x;};
vector<Scan>v[maxn];  //v[i]:第i列的线段(自带桶排序)
void add(int x1, int x2, int y1, int y2){
	v[x1].push_back({y1,y2,1});   //左边
	v[x2+1].push_back({y1,y2,-1});//右边
}

//线段树:维护区间被覆盖次数s(区间加),区间被截长度len(即多少位置s有值)
#define lch (p<<1)
#define rch (p<<1|1)
struct Sgt{ int s, len; }tr[maxn];
void push_up(int p, int l, int r){ //[l,r]每次都传递一下就不用建树啦
	if(tr[p].s!=0)tr[p].len=r-l+1; //被覆盖完全,更新长度
	else if(l==r)tr[p].len=0;
	else tr[p].len=tr[lch].len+tr[rch].len;//由子节点更新被截长度
}
void update(int p, int l, int r, int L, int R, int c){//区间[L,R]+=c
	if(r<L || l>R)return ;
	if(L<=l && r<=R){
		tr[p].s += c;  //懒标记
		push_up(p,l,r);
		return ;
	}
	int mid = (l+r)>>1;
	update(lch,l,mid, L,R,c);
	update(rch,mid+1,r, L,R,c);
	push_up(p,l,r);
}
int gety(int p, int l, int r){//找到空着的位置
	if(tr[p].len==0)return l; //找到了
	int mid = (l+r)>>1;
	if(tr[lch].len<mid-l+1)return gety(lch,l,mid);
	else return gety(rch,mid+1,r);
}

int main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int n, d;  cin>>n>>d;
	for(int i = 1; i <= n; i++){
		int x1, y1, x2, y2;
		cin>>x1>>y1>>x2>>y2;
		x2--, y2--;
		if(x2-x1+1>=d){ x1=0, x2=d-1;}//大于[0,d-1]的部分不要了
		if(y2-y1+1>=d){ y1=0, y2=d-1;}
		x1=(x1%d+d)%d;  y1=(y1%d+d)%d;//移动到[0,d-1]来
		x2=(x2%d+d)%d;  y2=(y2%d+d)%d;
		if(x1<=x2){
			if(y1<=y2)add(x1,x2,y1,y2);
			else add(x1,x2,0,y2),add(x1,x2,y1,d-1);//拆分成两个矩形放入[0,d-1]位置
		}else{
			if(y1<=y2) add(0,x2,y1,y2),add(x1,d-1,y1,y2);
            else add(0,x2,0,y2),add(x1,d-1,y1,d-1),add(0,x2,y1,d-1),add(x1,d-1,0,y2);//拆分成四个矩形放入[0,d-1]位置
		}
	}
	for(int i = 0; i < d; i++){//扫描每一条纵坐标轴
		for(Scan line: v[i]){  //把所有的线放入线段树
			update(1,0,d-1, line.l,line.r,line.x);
		}
		if(tr[1].len < d){//如果当前所有的和长度加起来小于d,那么意味着有空的位置
			cout<<"YES\\n";
			cout<<i<<" "<<gety(1,0,d-1)<<"\\n";
			return 0;
		}
	}
	cout<<"NO\\n";
	return 0;
}


D Delete Edges

题意:



#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;  cin>>n;
	int m = (n*(n-1)/2-n)/3+1;
	cout<<m<<"\\n";
	for(int i = 1; i <= n; i++){
		for(int j = i+1; j <= n; j++){
			int k = n-i-j;
			if(k<=0)k+=n;
			if(k>j)cout<<i<<" "<<j<<" "<<k<<"\\n";
		}
	}
	return 0;
}


以上是关于2021牛客暑期多校训练营6,签到题CFHI的主要内容,如果未能解决你的问题,请参考以下文章

2021牛客暑期多校训练营7,签到题FHI

2021牛客暑期多校训练营1, 签到题DFBG

2021牛客暑期多校训练营10,签到题FH

2021牛客暑期多校训练营5,签到题BDHJK

2021牛客暑期多校训练营4,签到题CFIJ

“蔚来杯“2022牛客暑期多校训练营6,签到题GJBMA