首页 > 其他分享 >Educational Codeforces Round 171 (Rated for Div. 2)B-D

Educational Codeforces Round 171 (Rated for Div. 2)B-D

时间:2024-10-30 22:46:04浏览次数:8  
标签:Educational Rated ll Codeforces long cin stk0 while cnt

B.Black Cells

题目:

思路:

首先我们发现要分奇偶讨论。

  1. 偶数:很简单,取a[2]-a[1],a[4]-a[3],.........a[n]-[n-1]的最大值。
  2. 奇数:我只需要知道假如删除当前的这个数剩下的数最大的间隔值,注意只能删除1,3,等奇数位,因为要保证删除后左右的数为偶数。(我的代码里面是偶数位因为我的索引从0开始)

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
void solve(){
	ll n;cin>>n;
	vector<ll> a(n);
	for(ll i=0;i<n;i++)cin>>a[i];
	ll ans=0x3f3f3f3f3f3f3f3f;
	if(n%2){
		for(ll i=0;i<n;i+=2){
			ll t=1;
			for(ll j=i-1;j>0;j-=2){
				t=max(t,a[j]-a[j-1]);
			}
			for(ll j=i+1;j+1<n;j+=2){
				t=max(t,a[j+1]-a[j]);
			}
			ans=min(ans,t);
		}
	}else{
		ans=0;
		for(ll i=1;i<n;i+=2){
			ans=max(a[i]-a[i-1],ans);
		}
	}
	cout<<ans<<endl;
	return;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	ll _;cin>>_;
	while(_--)solve();
	return 0;
}

C.Action Figures

题目:

思路:

通过题目我们可以知道只有当s[i]=='1'时我们才能购买。所以我们就要考虑当s[i]=='1'时我们怎样买最优。然后可以发现我们如果前面由0的话我们尽量先把为0的人偶购买了,因为对于s[i]=='1'的最优处理法是买一个前面的让他变成免费的,所以如果前面有0我们尽量买0的人偶,如果没有的话才考虑买1。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
void solve(){
	ll n;cin>>n;
	string s;cin>>s;
	s='*'+s;
	ll ans=0;
	stack<ll> stk0;
	stack<ll> stk1;
	for(ll i=1;i<=n;i++){
		if(s[i]=='0'){
			stk0.push(i);
		}
	}
	for(ll i=n;i>=1;i--){
		if(s[i]=='1'){
			while(stk0.size()&&stk0.top()>i){
				ans+=stk0.top();
				stk0.pop();
			}
			if(stk0.size()){
				ans+=stk0.top();
				stk0.pop();
			}else{
				stk1.push(i);
			}
		}
	}
	ll t=stk1.size()+1;
	for(ll i=1;i<=t/2;i++){
		ans+=stk1.top();
		stk1.pop();
	}
	while(stk0.size()){
		ans+=stk0.top();
		stk0.pop();
	}
	cout<<ans<<endl;
	return;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	ll _;cin>>_;
	while(_--)solve();
	
	return 0;
}

D.Sums of Segments

题目:

思路:

就写一下每一项然后观察,然后建各种数组就行了。这里为了防止超时要用一个二分。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
void solve(){
	ll n;cin>>n;
	vector<ll> a(n+1);
	for(ll i=1;i<=n;i++)cin>>a[i];
	vector<ll> b(n+1);
	vector<ll> pre(n+1);
	for(ll i=1;i<=n;i++)pre[i]=pre[i-1]+a[i];
	ll sm=0;
	for(ll i=1;i<=n;i++)sm+=pre[i];
	for(ll i=1;i<=n;i++){
		b[i]=sm;
		sm-=(n-i+1)*a[i];
	}
	for(ll i=1;i<=n;i++){
		b[i]+=b[i-1];
	}
	vector<ll> a2(n+1);
	for(ll i=1;i<=n;i++){
		a2[i]=a[i]*(n-i+1);
	}
	for(ll i=1;i<=n;i++)a2[i]+=a2[i-1];
	for(ll i=1;i<=n;i++)pre[i]+=pre[i-1];//对pre求第二次前缀
	ll q;cin>>q;
	for(ll i=1;i<=n;i++)a[i]+=a[i-1];
	auto pos=[&](ll x)->ll{
		return x*n-x*(x-1)/2;
	};
	auto f1=[&](ll idx)->ll{
		ll l,r;
		l=0,r=n;
		ll res=0;
		ll cnt=0;
		while(l<=r){
			ll mid=(l+r)/2;
			if(pos(mid)<=idx){
				cnt=mid;
				l=mid+1;
			}else{
				r=mid-1;
			}
		}
		res=b[cnt];
		if(idx>pos(cnt)){
			ll en=idx-pos(cnt)+cnt;
			res+=pre[en]-a2[cnt]+a[cnt]*(n-en);
		}
		return res;
	};
	while(q--){
		ll t1,t2;cin>>t1>>t2;
		cout<<f1(t2)-f1(t1-1)<<endl;
	}
	return;
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	solve();
	return 0;
}
/
///        //
/            
/    .     .    ///
/             ///
//     ---      
//           
/
/
/

///好困!课好多

标签:Educational,Rated,ll,Codeforces,long,cin,stk0,while,cnt
From: https://blog.csdn.net/2301_77680189/article/details/143358090

相关文章

  • Codeforces Round 978(div.2) D1
    #感觉挺有意思的一道题题目:思路:观察发现对于两个人a,b如果两个人里面没有Impostor那么,你得到的回答是一样的,如果有impostor那么结果不同,那么我们就可以两个两个的询问,先找到2个人里面有impostor然后在找另外一个人来询问就行了。代码:#include<bits/stdc++.h>usin......
  • Codeforces Global Round 27,D. Yet Another Real Number Problem 题解
    单调栈+贪心题意:给定一个序列从左往右对于每个索引iii,求出其前缀的数组可以进行任意次以下操作的条件下:选择......
  • Codeforces Round 981 (Div. 3) ABCDE
    CodeforcesRound981(Div.3)ABCDEA.SakurakoandKosuke藕是看样例直接猜了结论......
  • Codeforces Round 982 (Div. 2)
    CodeforcesRound982(Div.2)总结A猜结论,最后的图形的周长都能移成一个长方形的周长,这个长方形就是\(w\)和\(h\)的最大值。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<q......
  • Question Decomposition Improves the Faithfulness of Model-Generated Reasoning
    文章目录题目摘要简介结果相关工作结论附录题目问题分解提高了模型生成推理的准确性论文地址:https://arxiv.org/abs/2307.11768摘要    随着大型语言模型(LLM)执行越来越困难的任务,验证其行为的正确性和安全性变得越来越困难。解决此问题的一种方法是促......
  • # [Educational Codeforces Round 171](https://codeforces.com/contest/2026)
    EducationalCodeforcesRound171D.SumsofSegments定义四个前缀和:\(s_i=a_1+a_2+\dots+a_i\)\(u_i=s_1+s_2+\dots+s_i\)\(t_i=s(i,i)+s(i,i+1)+\dots+s(i,n)\)\(ts_i=t_1+t_2+\dots+t_i\)\(s_i\)为\(a_i\)的前缀和,\(u_i\)为\(s_i\)的前缀和,\(t_i\)为分块之后第......
  • Codeforces 4 A-D
    题面ABCD难度:红橙橙黄题解A题目大意:判断一个正整数\(w\)能否表示成两个正偶数之和。解题思路:考虑分类讨论\(w\)。对于\(1\)和\(2\),显然为NO;对于\(w\ge3\),考虑将其表示为\(x+2\)。根据题意,若\(x\)为偶数,则答案显然必为YES;否则必然为NO。因为\(......
  • [CodeForces] CF628 题解
    A.TennisTournamentLink-CFLink-Luogu【题目大意】\(n\)个选手进行若干场比赛,胜者保留,败者淘汰。每场比赛为两人。每场比赛每个人需要\(b\)瓶水,裁判需要\(1\)瓶水。每个人参加这些比赛总共需要\(p\)条毛巾。注意:洛谷题面翻译有误!建议看英文版。【解题思路】每场比......
  • Educational Codeforces Round 171 (Rated for Div. 2) 10.28 ABCD题解
    EducationalCodeforcesRound171(RatedforDiv.2)10.28(ABCD)题解A.PerpendicularSegments数学(math)计算几何(geometry)题意:给定一个\(X,Y,K\)。需要求解出二维坐标系中的四个点\(A,B,C,D\),满足:\(0\leqA_x,B_x,C_x,D_x\leqX\),\(0\leqA_y,B_y,C_y,D_y\leqY\)。并......
  • Educational Codeforces Round 171 (Div. 2)
    EducationalCodeforcesRound171(Div.2)A猜结论,两条边的最小值最大时,两条边相等。所以取\(min(x,y)\)为边长的正方形,对角线就是所求。#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>usingnamespacestd;intx,y,k;voidsolve(){......