首页 > 其他分享 >CCPC2022威海补题

CCPC2022威海补题

时间:2022-11-07 20:23:25浏览次数:88  
标签:node CCPC2022 限制 int ll long 补题 威海 区间

K

看完题之后思路是很自然的:对于每个要求,就转化成对于l和r的限制。原本被题目解释干扰了,纠结了一下区间长度的限制觉得很复杂;后来发现只要l和r合法,区间长度就合法,所以对于1的限制直接取交,对于2的二选一的限制,直接按照l的限制排序,枚举l所在的区间,即可得到r的范围,再和一开始的交集取交即可。

这思路确实很容易也很好写,但写完疯狂wa2。。。还是有个小细节没注意到,,,有点破防

image
此处要和1取max,因为原本算出来的l可能小于0,原理其实和后面的和L取min是一样的,但1的限制太容易忽略(区间范围关系的计数题,应该把每个限制都写成区间的形式!!而不是只有一边的不等式),,,而且在上面其实考虑过限制1算出来<0的情况,也忘记考虑限制2了,只能说写题的时候脑子比较混乱
image

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
const int N=1e5+5,F=2e9+5;
int T,n,m,L,R;
struct node{
	int l,r;
}p[N];
int mn[N];
bool cmp(node u,node v){
	return u.l<v.l;
}
void work(int id){
	cin>>n;
	m=0;
	L=F; R=1;
	while(n--){
		int t;
		ll k,x;
		scanf("%lld%lld%lld",&t,&k,&x);
		ll s=k*(k-1)/2;
		int l=(int)((x-s)/k),r=(int)((x+s-1)/k+1);
		if(t==1) L=min(L,l),R=max(R,r);
		else p[++m]=(node){l,r};
	}
	if(L<=0){
		puts("0");
		return;
	}
	if(L==F){
		puts("-1");
		return;
	}
	sort(p+1,p+m+1,cmp);
	p[0]=(node){0,0};
	p[m+1]=(node){F,F};
	mn[m+1]=F;
	for(int i=m;i;i--) mn[i]=min(p[i].r,mn[i+1]);
	ll ans=0;
	for(int i=0;i<=m;i++){
		int a=max(1ll,p[i].l+1),b=min(L,p[i+1].l);
		if(a>b || mn[i+1]<=R) continue;
		if(b==F || mn[i+1]==F){
			puts("-1");
			return;
		}
		else ans+=1ll*(b-a+1)*(mn[i+1]-R);
	}
	cout<<ans<<endl;
}
signed main()
{
	cin>>T;
	for(int i=1;i<=T;i++) work(i);
	return 0;
}

标签:node,CCPC2022,限制,int,ll,long,补题,威海,区间
From: https://www.cnblogs.com/szsz/p/16867303.html

相关文章

  • 杭电多校补题
    题目100110021003100410051006100710081009101110121013​​Contest1​​Path​​Contest2​​\​​Contest3​​\\\​​Contest4​​\\\​​Contest5​​\\\​​Conte......
  • Team Extra Contest 2022-10-21补题
    D.38parrots线段树#include<bits/stdc++.h>usingnamespacestd;#defineIOSios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)#definerep(a,b......
  • 河北省赛HBCPC2022补题
    赛时过了4道,D、H签到,F题贪心莫名卡了很久,M题用了线段树莫名过了,正解应该是用贡献度(But想不出来),赛后发现B题思路完全正确,就是没有时间写了:(,I题字符串也是一道简单dp(可惜看......
  • CF/AT 乱做/补题
    2021CFRound830CFRound829CFEducational138杂题选做......
  • CF昨天两场比赛补题目829+830(DIv2)
    CodeforcesRound#829(Div.2):A:https://codeforces.com/contest/1754/problem/A题意:给定一串由QA两个元素组成的字符串,判断是否Q的数量大于A的数量,如果是输出No,如果......
  • 补题记录(2022.10)
    补题记录2022ShanghaiCollegiateProgrammingContest(2022上海省赛)B-带权并查集+差分约束C-数学、贪心E-dp或ch表转移L-字符串哈希(已过,2000ms)orAC自动机......
  • Atcoder补题计划
    ◉ABC274F-Fishing//枚举作为左端点的鱼//每条鱼有一个在这个区间中的时间段//计算出与长度为a的区间有交集的时间的区间的权值的最大值//时间的区间(离散化......
  • 补题记录——Oct. Training 1-图论、集合哈希
    H-BoboniuWalksonGraphhttps://codeforces.com/problemset/problem/1394/B题意给n个点m条有向边,么个点的出度不超过k(k<=9),每条边都有一个边权在(\(1<=w<=m\))且每条边......
  • 2020CCPC威海 C Rencontre(树形DP,期望)
    题意:有3个人,每个人有一些待选位置。就是当确定三个人确定位置u1,u2,u3后,需要找到一个位置v到三个位置的距离之和最小,现在给出u1,u2,u3的待选取值,问距离......
  • 2021 CCPC 威海站 VP记录(题解)
    2021CCPC威海站VP记录(题解)题目顺序为vp时开题顺序:A-Goodbye,Ziyin!签到,连边数小于等于2的可以作为二叉树根,若有大于4的直接输出0。code:voidsolve(){ int......