首页 > 其他分享 >Codeforces Round 908 (Div. 2)

Codeforces Round 908 (Div. 2)

时间:2023-12-03 15:46:39浏览次数:31  
标签:10 le int 908 Codeforces cin multiset Div ldots

总结

T1

题目大意:

A,B两人玩游戏,游戏规则如下:
整场游戏有多轮,每轮游戏先胜 \(X\) 局的人获胜,每场游戏先胜 \(Y\) 局的人获胜。

你在场边观看了比赛,但是你忘记了 \(x\) 和 \(y\) ,只记得总共比了 \(1 \le n \le 20\) 局,和每局获胜的人,请判断谁获胜了。如果A获胜,输出 A ,如果B获胜,输出 B ,如果都有可能,输出 ?

翻自洛谷CF1894A

分析:

不难看出最后一局胜利的就是胜利的人。
提示:若已经决出胜负,则不会继续进行比赛。

code:

#include <bits/stdc++.h>
using namespace std;

int main ()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,ans=0;
		cin>>n;
		string s;
		cin>>s;
		cout<<s[n-1]<<'\n';
	}
    return 0;
}

T2

题意:

给定一个数组 \(a_1, a_2, ..., a_n\)。你需要找到一个数组 \(b_1\), \(b_2\), ..., \(b_n\),其中包含数字 \(1, 2, 3\),使得以下三个条件中恰好有两个条件被满足:

  • 存在 \(1\le i, j\le n\),使得 \(a_i=a_j,b_i=1,b_j=2\)。
  • 存在 \(1\le i, j\le n\),使得 \(a_i=a_j,b_i=1,b_j=3\)。
  • 存在 \(1\le i, j\le n\),使得 \(a_i=a_j,b_i=2,b_j=3\)。

如果不存在这样的数组 \(b\),请报告不可以。

翻自洛谷CF1894B

分析:

三个条件的前提条件都是有两个数相等,也就是说我们只要处理相等的数。不相等的数全部置为1。再来考虑相等的数,如果几个数相等,把它们分别置为1,2,3,则必定满足三个条件。所以只能有两个数如1,3,使他满足一个条件,再找另一组相同的数,使他满足另一条件。
具体只需一个桶统计数的个数,第一组个数大于1的数置为2,第二组个数大于1的数置为3,其他数置为1。
如: 1 2 3 4 2 1 4 3 4 2 1
输出:2 2 1 1 1 1 1 1 1 1 1

code:

#include <bits/stdc++.h>
using namespace std;
const int N=105;
int a[N],b[N],c[N];
int main ()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		int x=0,y=0,x1,x2,st=0;
		cin>>n;
		for(int i=1;i<=100;i++) b[i]=0,c[i]=1;
		for(int i=1;i<=n;i++) cin>>a[i],b[a[i]]++;
		for(int i=1;i<=100;i++) if(b[i]>1) x++;
		if(x<2) st=1;
		if(st) 
		{
			cout<<-1<<'\n';
			continue;
		}
		y=2;
		for(int i=1;i<=n;i++)
		{
			if(b[a[i]]>1&&y<4) cout<<y<<" ",y++,b[a[i]]=0;
			else cout<<1<<" "; 
		}
		cout<<'\n';
	}
    return 0;
}

T3

题意:

给定长度为 \(n\) 的数列 \(a\),定义一次轮换为将 \(a_1,a_2,\cdots,a_n\) 变为 \(a_2,a_3,\cdots,a_n,a_1\)。

定义一次操作为,先选择一个满足 \(a_x=x\) 的数 \(x\),然后对数列做 \(x\) 次轮换。

再给定 \(k\) 与数列 \(b\),求是否存在一个初始序列 \(a\),使得其能经过恰好 \(k\) 次合法的操作变为 \(b\)。

\(n\leq 2\times 10^5,k\leq 10^9\)。

翻自洛谷CF1893A

分析:

本题最最最关键一点是 \(a_x\) 轮换 \(x\) 次后,都会变成 \(a_n\) 。
从这入手,倒推的话我们每次只需考虑 \(a_n\) , \(a_n\) 一定是从 \(a_x\) 推过来的.如:7 2 1 一定是由 1 7 2 推过来的。
则我们只需考虑如果 \(a_n \le n\),进行还原操作,把数组向右移动 \(a_n\) 。如果 \(a_n > n\),则说明无法返回,输出 No
还原只需一个变量 move,循环不一定用 k 次,因为只有最多 n 个状态。

code:

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int main ()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,k,move=0,st=1;
		cin>>n>>k;
		for(int i=1;i<=n;i++) cin>>a[i];
		if(k>n) k=n;
		for(int i=1;i<=k;i++)
		{
			if(a[n-move]>n) 
			{
				cout<<"No"<<'\n';
				st=0;
				break;
			}
			else
			{
				move+=a[n-move];
				if(move>=n) move-=n;
			}
		}
		if(st) cout<<"Yes"<<'\n';
	}
    return 0;
}

T4

题意:

给定两个序列 \(a,b\),将 \(b\) 中所有元素以任意顺序在任意位置插入 \(a\) 中,使得形成的新序列 \(c\) 的最长上升子序列最短,输出你的序列 \(c\)。

翻自洛谷CF1893B

分析:

\(a\) 序列的顺序是不变的,也就是说 \(LIS(c)\) 的大小至少为 \(LIS(a)\)。考虑是否一定能使 \(LIS(c)=LIS(a)\),显然是可以的。首先将 \(b\) 序列排序,\(LIS(b)=0\),然后,\(a,b\) 中元素,哪个大就把哪个插入到 \(c\) 中,使用两个指针,贪心更新 \(c\)。

code:

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int main ()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,k,move=0,st=1;
		cin>>n>>k;
		for(int i=1;i<=n;i++) cin>>a[i];
		if(k>n) k=n;
		for(int i=1;i<=k;i++)
		{
			if(a[n-move]>n) 
			{
				cout<<"No"<<'\n';
				st=0;
				break;
			}
			else
			{
				move+=a[n-move];
				if(move>=n) move-=n;
			}
		}
		if(st) cout<<"Yes"<<'\n';
	}
    return 0;
}

T5

题意:

注:下文中的 multiset 均为可重集。

我们定义一个大小为 \(len\) 的 multiset 的不优美度为数 \(len\) 在这个 multiset 里的出现次数。

给你 \(m\) 个 multiset,第 \(i\) 个 multiset 包含 \(n_i\) 个不同的元素,具体的:这个 multiset 中含有 \(c_{i,1}\) 个 \(a_{i,1}\),\(c_{i,2}\) 个 \(a_{i,2}\),\(\dots\),\(c_{i,n_i}\) 个 \(a_{i,n_i}\)。保证 \(a_{i, 1} < a_{i, 2} < \ldots < a_{i, n_i}\)。同时给你 \(l_1, l_2, \ldots, l_m\) 和 \(r_1, r_2, \ldots, r_m\),其中 \(1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i}\) 。

我们按照如下操作创建一个 multiset X ,最初 X 为空。然后,对于 \(1\) 到 \(m\) 的每一个数 \(i\),执行下面的操作:

1.选择一个数 \(v_i\) 使得 \(l_i \le v_i \le r_i\)

2.从第 \(i\) 个 multiset 里选择任意 \(v_i\) 个数并把它们加入 X 。

你的任务是选择 \(v_1, \ldots, v_m\) ,使得 multiset X 的不优美度最小。

多测,\(1 \le t \le 10^4\) , \(1 \le m \le 10^5\),\(1 \le n_i \le 10^5, 1 \le l_i \le r_i \le c_{i, 1} + \ldots + c_{i, n_i} \le 10^{17}\),\(1 \le a_{i, 1} < \ldots < a_{i, n_i} \le 10^{17}\), \(1 \le c_{i, j} \le 10^{12}\) ,\(m\) 的总和以及所有数据里的 \(n_i\) 的总和不超过 \(10^5\)。

翻自洛谷CF1893C

没看懂题意 qwq。

标签:10,le,int,908,Codeforces,cin,multiset,Div,ldots
From: https://www.cnblogs.com/zhouruoheng/p/17873267.html

相关文章

  • CodeForces 1526F Median Queries
    洛谷传送门CF传送门首先,如果我们确定了\(1,2\)或\(n-1,n\)的位置,我们就能求出原排列。因为题目给了\(p_1<p_2\),所以可以不考虑对称性。也就是说我们知道两个位置是\(1,2\)或\(n-1,n\)但不确定究竟是\(1,2\)还是\(n-1,n\)也可以。然后,如果我们确定......
  • Codeforces Round 878 (Div. 3)
    CodeforcesRound878(Div.3)A:ABCA.CipherShifer题意:在自身后面添加一个字母,但是不能添加自身思路:找到第二个与自身相符的就再找#include<bits/stdc++.h>usingnamespacestd;constintMAX=110;chara[MAX];voidsolve(){intn;cin>>n;for(......
  • [Codeforces] CF1627B Not Sitting
    题意Rahul和Tina在玩一个游戏。游戏在一个\(n\timesm\)的网格图上进行,记第\(r\)行第\(c\)列上的格子为\((r,c)\)。定义\((a,b)\)与\((c,d)\)之间的距离为\(\left|a-c\right|+\left|b-d\right|\)。游戏开始后,Tina会选择恰好\(k\)个格子,并将其涂成粉红色。涂......
  • [Codeforces] CF1659B Bit Flipping
    题面给定一个长为\(n\)的01串,你可以进行\(k\)次操作。每次操作中,你可以选择任意一位,并将除了这一位以外的其它位翻转(\(1\)变\(0\),\(0\)变\(1\)),输出\(k\)次操作后能获得的字典序最大的字符串,并输出每一位在操作中被选择的次数。若有多解输出任意一解。思路可以发现......
  • [Codeforces] CF1675D Vertical Paths
    题目描述给定一棵由\(n\)个顶点组成的有根树。顶点由\(1\)到\(n\)编号。任何顶点都可以是树的根。请在树上找出这样一组路径:每个顶点恰好属于一条路径,每条路径可以包含一个或多个顶点;在每条路径中,每个节点的下一个节点是当前节点的子节点(即路径总是向下——从父节点......
  • Codeforces Round 912 (Div. 2) E - Geo Game
    考虑什么时候会改变答案的奇偶,显然可以根据\(x\oplusy\)的奇偶性分组,在组内进行跳跃不会改变,只有当组间跳跃的时候才会改变。打表观察先手什么时候必胜,其中:\(u\)是当前获胜目标为奇/偶(1/0),\(v\)是位于哪一组,\(a,b\)代表两组还剩多少,\(st\)代表当前答案的奇偶性。intdfs(intu,......
  • 【ErikTse】2023-Codeforces新手训练营 第六期题解
    A.Wrath题目大意给你一个\(L\)数组和\(n\)个人,第\(i\)个人可以使用威力为\(L_i\)的闪电旋风劈击杀前面\(L_i\)人,问你最后能存活多少人?思路差分。开一个数组来标记当前威力的闪电旋风劈能击杀到的最远的人和使用技能的人,最远击杀的人所在的位置+1,自己的位置-1,这样算前缀和时所......
  • Codeforces Round 912 (Div. 2)
    CodeforcesRound912(Div.2)基本概述最难受的一集。A题秒了。B题幸苦推了两个小时,最后也通过了pretest了,结果赛后被HACK。C题知道是DP,但觉得不好推状态转移方程,所以全心全意去做B题了。爆掉\(150\)分B.StORageroom我的思路其实就几乎是答案。之前几乎没怎......
  • RuCode 2020 Division A+B. I ✖ [PR #5] 和平共处
    前言认认真真学习了一下这道题相关的做法以及有关的二分图网络流理论,感觉自己又刷新了一些东西的理解。所以说我们就从普通的二分图匹配开始吧!二分图匹配众所周知,二分图最大匹配可以用网络流Dinic算法做到\(O(m\sqrtn)\)的复杂度。在某些特定的图下,我们有一种“贪心流”......
  • [Codeforces] CF1591C Minimize Distance
    CF1591CMinimizeDistance题目一条线上有\(n\)(\(1\len\le2\cdot10^5\))个仓库,第\(i\)个仓库的位置是\(x_i\)(\(1\lei\len\))。你有\(n\)箱货物,要分别运到这\(n\)个仓库里。你的初始位置在点\(0\),一次可以携带\(k\)(\(1\lek\len\))箱货物。在送完携带......