首页 > 其他分享 >Educational Codeforces Round 171 (Rated for Div. 2)题解记录

Educational Codeforces Round 171 (Rated for Div. 2)题解记录

时间:2024-10-29 13:09:22浏览次数:7  
标签:Educational Rated 题解 ll cin x% ans include mod

比赛链接:https://codeforces.com/contest/2026

A. Perpendicular Segments


题目说了必定有答案,直接对角线即可

#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<deque>
#include<cctype>
#include<string.h>
#include<math.h>
#include<time.h>
#include<random>
#include<stack>
#include<string>
#define ll                                    long long 
#define lowbit(x) (x & -x)
using namespace std;
mt19937 rnd(time(0));
const ll mod=1e9+7;
const ll N=2e5+5;
ll ksm(ll x,ll y)
{
	ll ans=1;
	while(y)
	{
		if(y&1)
		ans=(ans%mod*x%mod)%mod;
		x=x%mod*(x%mod)%mod;
		y>>=1;
	}
	return ans%mod%mod;
}
ll gcd(ll x,ll y)
{
	if(y==0)
	return x;
	else 
	return gcd(y,x%y);
}
void fio()
{
		ios::sync_with_stdio(0);
		cin.tie(0);
		cout.tie(0);
}
int main()
{
	fio();
	ll t;
	cin>>t;
	while(t--)
	{
		ll x,y,k;
		cin>>x>>y>>k;
		ll j=min(x,y);
		cout<<0<<" "<<0<<" "<<j<<" "<<j<<endl;
		cout<<j<<" "<<0<<" "<<0<<" "<<j<<endl;
	}
}

B. Black Cells


n为偶数答案是固定的,n为奇数可以二分答案

#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<deque>
#include<cctype>
#include<string.h>
#include<math.h>
#include<time.h>
#include<random>
#include<stack>
#include<string>
#define ll                                    long long 
#define lowbit(x) (x & -x)
using namespace std;
mt19937 rnd(time(0));
const ll mod=1e9+7;
const ll N=2e5+5;
ll ksm(ll x,ll y)
{
	ll ans=1;
	while(y)
	{
		if(y&1)
		ans=(ans%mod*x%mod)%mod;
		x=x%mod*(x%mod)%mod;
		y>>=1;
	}
	return ans%mod%mod;
}
ll gcd(ll x,ll y)
{
	if(y==0)
	return x;
	else 
	return gcd(y,x%y);
}
void fio()
{
		ios::sync_with_stdio(0);
		cin.tie(0);
		cout.tie(0);
}
ll a[250000];
int main()
{
	fio();
	ll t;
	cin>>t;
	while(t--)
	{
		ll n;
		cin>>n;
		if(n==1)
		{
			ll b;
			cin>>b;
			cout<<1<<endl;
			continue;
		}
		for(ll i=1;i<=n;i++)cin>>a[i];
		sort(a+1,a+1+n);
		//a[n+1]=0;
		if(n%2==0)
		{
			ll ans=0;
			for(ll i=1;i<=n-1;i+=2)
			{
				ans=max(ans,a[i+1]-a[i]);
			}
			cout<<ans<<endl;
		}
		else 
		{
			ll l=1,r=1e18;
			while(l<r)
			{
				ll mid=(l+r)>>1;
				ll gs=1;
				ll cnt=0;
				ll pd=0;
				while(gs<=n-1)
				{
					if(a[gs+1]-a[gs]<=mid)
					{
						gs+=2;
						continue;
					}
					else 
					{
						if(cnt==1){
							pd=1;
							break;
						}
						gs++;
						cnt++;
						continue;
					}
				}
					if(pd)
					l=mid+1;
					else 
					r=mid;
			}
			cout<<r<<endl;
		}
	}
}

C. Action Figures


分析可得0点必选买,非0点优先用0点消除,其次用下标最小的1点消除

#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<deque>
#include<cctype>
#include<string.h>
#include<math.h>
#include<time.h>
#include<random>
#include<stack>
#include<string>
#define ll                                    long long 
#define lowbit(x) (x & -x)
using namespace std;
mt19937 rnd(time(0));
const ll mod=1e9+7;
const ll N=2e5+5;
ll ksm(ll x,ll y)
{
	ll ans=1;
	while(y)
	{
		if(y&1)
		ans=(ans%mod*x%mod)%mod;
		x=x%mod*(x%mod)%mod;
		y>>=1;
	}
	return ans%mod%mod;
}
ll gcd(ll x,ll y)
{
	if(y==0)
	return x;
	else 
	return gcd(y,x%y);
}
void fio()
{
		ios::sync_with_stdio(0);
		cin.tie(0);
		cout.tie(0);
}
ll a[550000];
int main()
{
	fio();
	ll t;
	cin>>t;
	while(t--)
	{
		ll mo=1;
	ll n;
	cin>>n;
	string f;
	cin>>f;
	set<ll>q,k;
	ll op=0;
	ll ans=0;
	for(ll i=1;i<=n;i++)
	{
		if(f[i-1]=='0')
		q.insert(i);
		else 
		k.insert(i);
	}
	for(ll i=f.size()-1;i>=0;i--)
	{
		if(f[i]=='1')
		{
			ll c=(i+1);
			auto j=k.lower_bound(c);
			if(j!=k.end())
			{
				if(q.size()>0)
				{
					ll u=*q.rbegin();
					q.erase(u);
					ans+=u;
					k.erase(c);
				}
				else
				{
					if(k.size()==1)
					{
						ans+=c;
						k.clear();
					}
					else 
					{
						ll u=*k.begin();
						k.erase(c);
						k.erase(u);
						ans+=u;
					}
				}
			}
		}
		else 
		{
			ll u=i+1;
			if(q.lower_bound(u)!=q.end())
			{
				q.erase(u);
				ans+=u;
			}
		}
		//cout<<ans<<endl;
	}
	cout<<ans<<endl;
	}
}

D. Sums of Segments


直接暴力统计优化,数据不会爆long long

#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<deque>
#include<cctype>
#include<string.h>
#include<math.h>
#include<time.h>
#include<random>
#include<stack>
#include<string>
#define ll                                    long long 
#define lowbit(x) (x & -x)
using namespace std;
mt19937 rnd(time(0));
const ll mod=1e9+7;
const ll N=2e5+5;
ll ksm(ll x,ll y)
{
	ll ans=1;
	while(y)
	{
		if(y&1)
		ans=(ans%mod*x%mod)%mod;
		x=x%mod*(x%mod)%mod;
		y>>=1;
	}
	return ans%mod%mod;
}
ll gcd(ll x,ll y)
{
	if(y==0)
	return x;
	else 
	return gcd(y,x%y);
}
void fio()
{
		ios::sync_with_stdio(0);
		cin.tie(0);
		cout.tie(0);
}
ll a[325000];
ll pre[325000];//一维前缀
ll pre1[325000];//类似二维
ll sub[320555];
ll pre3[325000];
//1 
//1 2
//1 2 5
//1 2 5 10
ll n;
set<pair<ll,ll>>q;
ll qu(ll x)
{
	ll ans=0;
	auto j=q.lower_bound({x,0});
	ll zq=(*j).second;
	ans+=pre3[zq-1];
	j--;
	ll wz=x-(*j).first+zq-1;
	ans+=pre1[zq]-sub[wz+1]-(pre[wz]-pre[zq-1])*(n-zq-(wz-zq));
	return ans;
}
int main()
{
	fio();
	ll t;
	t=1;
	while(t--)
	{
		q.clear();
		cin>>n;
		ll cnt=0;
		for(ll i=1;i<=n;i++)cin>>a[i],pre[i]=pre[i-1]+a[i],cnt+=pre[i];
		pre1[1]=cnt;
		for(ll i=2;i<=n;i++)pre1[i]=pre1[i-1]-(n-i+2)*a[i-1];
		for(ll i=1;i<=n;i++)pre3[i]=pre3[i-1]+pre1[i];
		sub[n+1]=0;
		for(ll i=n;i>=1;i--)sub[i]=sub[i+1]+a[i]*(n-i+1);
		q.insert({0,0});
		 cnt=0;
		for(ll i=1;i<=n;i++)
		{
			cnt+=(n-i+1);
			q.insert({cnt,i});
		}
		ll 	op;
		cin>>op;
		while(op--)
		{
			ll l,r;
			cin>>l>>r;
			cout<<qu(r)-(l-1?qu(l-1):0)<<endl;
		}
	}
}

标签:Educational,Rated,题解,ll,cin,x%,ans,include,mod
From: https://www.cnblogs.com/cjcf/p/18512815

相关文章

  • [ARC186E] Missing Subsequence 题解
    Description给定一个整数序列\(\left(X_1,\ldots,X_M\right)\),其长度为\(M\),元素取值为\(1,\ldots,K\)。要求找出长度为\(N\)的序列\((A_1,\ldots,A_N)\)的数量,元素取值为\(1,\ldots,K\),并满足以下条件,结果取模\(998244353\):在所有长度为\(M\)的序列中,唯......
  • ybtoj题解索引
    密码:sunxuhetai2009第一章-递推算法A.错排问题B.传球游戏C.数的划分D.栈的问题E.求f函数F.划分数列G.无限序列......
  • 题解:P3352 [ZJOI2016] 线段树
    首先,题目上说让期望乘上\((\frac{n(n+1)}{2})^q\)的目的就是让我们求方案数与值的乘积。然后我们考虑在操作过后一个位置上的值相对于原来的值肯定是不降的,于是可以想到对每一个值\(v\),原序列中所有\(\lev\)的元素一定构成了若干连续的区间。对每一个这样的区间而言,操作过......
  • Educational Codeforces Round 171 (Rated for Div. 2)
    目录写在前面A签到B暴力C反悔贪心D枚举,分块,推式子E网络流,最大权闭合子图F写在最后写在前面比赛地址:https://codeforces.com/contest/2026。因为太困了决定睡大觉,于是赛时unratedregister只写了DE。然而十一点半上床还是失眠到一点半睡的太搞了呃呃A签到B暴力限......
  • P6803 星际迷航 题解
    P6803星际迷航题解题目大意给定一颗\(N\)个节点的树。这样的树有\(D+1\)层,编号从\(0\)到\(D\)。对于\(i=0,1,\dots,D-1\),需要选择第\(i\)层的任意一个节点向第\(i+1\)层的任意一个节点连一条有向边。最初人在第\(0\)层图的\(1\)号节点。两个玩家交替选择下一......
  • Educational Codeforces Round 171 (Rated for Div. 2)
    A.PerpendicularSegments分析题目中的要求\(34\),说明需要较短的线段尽量长,那么两个线段应该一样长而又要求线段垂直,那么两线段可以放在一个正方形内做对角线那么此时\(x\)和\(y\)对称(代数一样上),取两个的较小值做一个正方形,答案即为对角线#include<bits/stdc++.h>usin......
  • CF1249F Maximum Weight Subset 题解 / 长链剖分复习
    CF1249FMaximumWeightSubset题解题目大意给定一个\(n\)个节点的树,每个节点有点权\(a_i\)。从中选出若干节点,要求这些点两两之间距离大于给定常数\(k\),使得点权和最大。Solve给出一种线性做法。前置知识:长链剖分优化DP。考虑一个DP:设\(f(u,d)\)表示在\(u\)的子......
  • Codeforces Round 982 (Div. 2) 10.26 (ABC)题解
    CodeforcesRound982(Div.2)10.26(ABC)题解A.RectangleArrangement数学(math)题意:有一个无限长宽的方形网格,初始为白色,现在有\(n\)个印章,每个印章有自己的宽\(w_i\)和高\(h_i\)。印章会使得网格涂色,变成黑色。这\(n\)个印章都需要使用一次,需要求解出最后网格中黑色......
  • Codeforces Round 982 (Div. 2) 题解(A-D)
    目录A思路codeB思路codeC思路卡题原因codeD思路未ac原因codeCodeforcesRound982(Div.2)A思路因为图形可以重叠,所以答案就是最长的长和最长的宽组成的矩形周长.codevoidfunc(void){ intn; cin>>n; intl=0,r=0; while(n--) { intx,y; cin>>x>>y......
  • 题解:CF1666J Job Lookup
    被迫来写篇题解。首先,第一个要求我们只需要在递归构造的时候保证子树对应区间连续即可,现在考虑第二个要求。就题目中的二叉树而言,想要确定其结构,我们只需要关注这段区间,即这棵子树根节点的编号,又因为子树区间连续,所以我们不难想到区间动态规划。设\(dp_{l,r}\)表示\(l\simr......