首页 > 其他分享 >Educational Codeforces Round 169 (Rated for Div2)

Educational Codeforces Round 169 (Rated for Div2)

时间:2024-12-01 10:55:17浏览次数:7  
标签:Educational Rated int Codeforces -- typedef solve ans

Educational Codeforces Round 169 (Rated for Div. 2) - Codeforces

Problem - A - Codeforces

构造

签到题,明显只有\(n\leq2\)的时候有解

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef pair<int,int> pii;
int n,m;
int a[N];
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	if(n==2)
	{
		if(abs(a[1]-a[2])>1)
		{
			puts("YES");return ;
		}
	}
	puts("NO");
}
int main()
{
	int t;cin>>t;
	while(t--)solve();
}

Problem - B - Codeforces

区间合并 构造

如果两者的区间没有交集的话答案就是\(1\),否则就是合并区间内的所有门加上区间合并后的两端的门,要注意如果合并前两端相同的话这这一端的门就不用加了

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef pair<int,int> pii;
int n,m;
int a[N];
void solve()
{
	int l,r,L,R;cin>>l>>r>>L>>R;
	if(l>L)
	{
		swap(l,L);swap(r,R);
	}
	if(r<L)cout<<"1"<<endl;
	else 
	{
		int st=L,ed=min(r,R);
		int ans=ed-st+2;
		if(l==L)ans--;
		if(r==R)ans--;
		cout<<ans<<endl;
	}
}
int main()
{
	int t;cin>>t;
	while(t--)solve();
}

Problem - C - Codeforces

数学 构造 排序

A要最大化拿到的价值,B同理,A先手,显然\(0\leq A-B\)

将数组排序,显然A每次要拿当前的最大值,B也要拿下一个最大值,这样差值才会最小

如果\(n\)为偶数的话,B只要每次增加奇数位置上的数且使其不大于偶数位置上的数字

如果\(n\)为奇数的话,同理,可以先不看第一个数字,因为B不可能去增加他,只需把后面处理完之后将答案加上第一个数就好了

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef pair<int,int> pii;
int n,m;
int a[N];
void solve()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	sort(a+1,a+1+n);
	long long ans=0;
	for(int i=n;i>1;i-=2)
	{
		ans=ans+a[i]-a[i-1];
	}
	ans=max(0LL,ans-m);
	if(n%2)ans+=a[1];
	cout<<ans<<endl;
}
int main()
{
	int t;cin>>t;
	while(t--)solve();
}

Problem - D - Codeforces

图论 最短路 构造 找规律

每个城市有两种颜色,一共有四种颜色,显然会有四种组合,只有两个城市间有至少一种相同颜色才可以传送

对于两个查询的城市,如果他们之间有相同的颜色,那么他们之间的最短路径只可能是\(|i-j|\)

否则,则需要一个中转点,且只能有一个,因为对于两个没有相同的颜色的城市来说,其余四种颜色组合都可以到达他们,

两个中转点只会增加路径长度

那么这题的关键在于如果两个城市不可以直接相通的话该如何快速找到离他们最近的中转点

这里用\(pre,suf\)数组分别记录每个位置的城市,离他最近的,在他之前或者在他之后的可以到达的城市

只需要利用一个\(now\)数组存储在其之前的状态

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef pair<int,int> pii;
int a[N];
int pre[7][N],suf[7][N];
int n,q;
map<string,int>mp;
map<int,int>sp;
void solve()
{
	scanf("%d%d",&n,&q);
	vector<int>now(7,0),nw(7,0);
	for(int i=1;i<=n;i++){string s;cin>>s;a[i]=mp[s];}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=6;j++)
		{
			if(j!=sp[a[i]])
			{
				if(now[j])pre[j][i]=now[j];
				else pre[j][i]=-1;
			}
		}
		now[a[i]]=i;
	}
	for(int i=n;i>=1;i--)
	{
		for(int j=1;j<=6;j++)
		{
			if(j!=sp[a[i]])
			{
				if(nw[j])suf[j][i]=nw[j];
				else suf[j][i]=-1;
			}
		}
		nw[a[i]]=i;
	}
	while(q--)
	{
		int x,y;scanf("%d%d",&x,&y);
		if(x>y)swap(x,y);
		if(sp[a[x]]!=a[y])
		{
			cout<<abs(x-y)<<endl;continue;
		}
		int ans=2e9;
		int l=-1,r=2e9;
		for(int i=1;i<=6;i++)
		{
			if(i!=a[x]&&i!=a[y])
			{
				if(pre[i][x]!=-1)l=max(l,pre[i][x]);
				if(suf[i][x]!=-1)r=min(r,suf[i][x]);
			}
		}
		if(l!=-1)ans=min(ans,abs(x-l)+abs(y-l));
		if(r<2e9)ans=min(ans,abs(r-x)+abs(r-y));
		l=-1,r=2e9;
		for(int i=1;i<=6;i++)
		{
			if(i!=a[x]&&i!=a[y])
			{
				if(pre[i][x]!=-1)l=max(l,pre[i][x]);
				if(suf[i][x]!=-1)r=min(r,suf[i][x]);
			}
		}
		if(l!=-1)ans=min(ans,abs(x-l)+abs(y-l));
		if(r<2e9)ans=min(ans,abs(r-x)+abs(r-y));
		if(ans<1e9)cout<<ans<<endl;else cout<<"-1"<<endl;
	}
}
int main()
{
	mp["BG"]=1;mp["BR"]=2;mp["BY"]=3;mp["GR"]=4;mp["GY"]=5;mp["RY"]=6;
	sp[1]=6;sp[6]=1;//无法到达的点
	sp[2]=5;sp[5]=2;
	sp[3]=4;sp[4]=3;
	int t;cin>>t;
	while(t--)solve();
}

标签:Educational,Rated,int,Codeforces,--,typedef,solve,ans
From: https://www.cnblogs.com/NIYAXIMEN/p/18579617

相关文章

  • Educational Codeforces Round 171 (Rated for Div
    EducationalCodeforcesRound171(RatedforDiv.2)-CodeforcesProblem-A-Codeforces几何构造没什么好说的,\(45\)度交的时候长度最大#include<bits/stdc++.h>usingnamespacestd;constintN=3e5+10;voidsolve(){ intx,y,k;cin>>x>>y>>k; if(x......
  • E. Photoshoot for Gorillas(Codeforces Round 966 (Div. 3))
    https://codeforces.com/contest/2000/problem/E题目描述你非常喜欢屮大猩猩,于是你决定为它们组织一次拍摄活动。大猩猩生活在丛林中,丛林被表示为一个有n行m列的网格,有w个大猩猩同意参与拍摄,第i个大猩猩的身高ai.你希望将所有大猩猩放置在网格的单元格中,并且确保每个单......
  • 每日一题:https://codeforces.com/contest/1700/problem/B
    题目链接:https://codeforces.com/contest/1700/problem/B#include<iostream>#include<string.h>#include<string>#include<cmath>#include<algorithm>usingnamespacestd;intmain(){intu;cin>>u;for(inti=1;i......
  • Codeforces Round 987 (Div. 2)
    目录写在前面A签到B结论,枚举C构造,数学D枚举,数据结构Edfs,树形DP,构造写在最后写在前面比赛地址:https://codeforces.com/contest/2031退役?累了。妈的明天体测测完直接飞昆明感觉要爆了、、、A签到保证给定序列不升,要求修改到不降,则将所有元素修改至相等一定是不劣的。......
  • 【二分+前缀和+后缀和】codeforces 2026 D. Sums of Segments
    题目https://codeforces.com/problemset/problem/2026/D题意第一行输入一个正整数\(n(1\leqn\leq3e5)\),第二行输入\(n\)个整数\(a_1,a_2,...,a_i,...,a_n(-10\leqa_i\leq10)\),第三行输入一个正整数\(q(1\leqq\leq3e5)\),随后\(q\)行,每行输入两个整数\(......
  • CodeTON Round 9 (Div. 1 + Div. 2, Rated, Prizes!)(A~C2)
    A-ShohagLovesMod思路假设构造差值是\(x=0,1,\dots,n\)这样的,那么只要让\(a_i\equivx\pmod{i}\)即可,也就是\(a_i=i+x\)。代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;voidsolve(){intn;cin>>n;fo......
  • 每日一题:https://codeforces.com/contest/1999/problem/D
    题目链接:https://codeforces.com/contest/1999/problem/D#include<iostream>#include<string>#include<vector>usingnamespacestd;intmain(){intn;cin>>n;for(;n>0;n--){stringarr1;stringarr2;......
  • Codeforces 赛题整合1
    对于训练赛的赛题整合。文章目录2033D-Kousuke'sAssignment题意:题解:代码2033C-Sakurako'sFieldTrip题意题解代码2022B-KarSalesman题意题解代码2025C-NewGame题意题解代码2033D-Kousuke’sAssignmentcodeforces链接题意:找出数组中最多有多少......
  • Codeforces 333 题目研讨
    题目传送门:ABCDEA解法:注意到最终支付的一定是\(3^k\)的钱。即得。B解法:不难发现芯片的前进路上不能有障碍,否则不可能在\(n-1\)步内完成。然后又不难发现,同一行或一列只能放一个。双不难发现,当\(n\)为奇数时,中行或中列可能会冲突,此时需要移除其中一个。叒不难发现,当......
  • Codeforces Round 986 (Div. 2) A-C
    A.Alice'sAdventuresin"Chess"AliceistryingtomeetupwiththeRedQueeninthecountryside!Rightnow,Aliceisatposition\((0,0)\),andtheRedQueenisatposition\((a,b)\).Alicecanonlymoveinthefourcardinaldirecti......