首页 > 其他分享 >[Codeforces] CF1857D Strong Vertices

[Codeforces] CF1857D Strong Vertices

时间:2023-11-24 20:48:39浏览次数:39  
标签:geq int Codeforces Vertices MAXN Strong

Strong Vertices - 洛谷

题解是个好东西

题意

给定两个数组 \(a\) 和 \(b\),对此构造一张有向图:

  • 若 \(a_u−a_v≥b_u−b_v\),则 \(u\) 向 \(v\) 连边。

求所有向其他所有顶点连边的顶点个数,并按从小到大顺序输出它们。

思路

先对原式进行转换:\(a_u-b_u\geq a_v-b_v\)

接着,由\(a>b\)且\(b>c\),则\(a>c\)得到,\(a\)和\(b\)连接,\(b\)和\(c\)连接,但是\(c\)不能和\(a\)连接。故\(a,b\)两个数列一定无环,也就是说\(a\)的入度为\(0\)

在考虑\(a=b\)的情况,这是就是\(a\)和\(b\)之间有一条无向边相连。

综上,得到结论:当一点除了所有与之相连的无向边之外入度为\(0\),该点符合题目要求(即称作Strong Vertices)

再根据最初的\(a_u-b_u\geq a_v-b_v\),推出,我们只需要找到\(a_i-b_i\)的最大值,再算出该最大值的出现数量即可。

其实这道题和图基本上八竿子打不着,最多在推导时有点用

代码

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5;
int maxn,n,a[MAXN],b[MAXN];
vector<int>ans;
int run()
{
	cin>>n;maxn=-2e9;ans.clear();
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++) cin>>b[i];
	for(int i=0;i<n;i++) maxn=max(maxn,a[i]-b[i]);
	for(int i=0;i<n;i++) if(a[i]-b[i]==maxn) ans.push_back(i+1);
	cout<<ans.size()<<endl;
	for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
	cout<<endl;
	return 0;
}
int main()
{
	int t;
	cin>>t;
	while(t--) run();
	return 0;
}

(好整齐的for

标签:geq,int,Codeforces,Vertices,MAXN,Strong
From: https://www.cnblogs.com/lyk2010/p/17854725.html

相关文章

  • [Codeforces] CF1714E Add Modulo 10
    题目传送门代码一遍AC真的很爽,样例都是一遍过题意每个测试点含多组测试数据。对于每组测试数据第1行一个整数\(n\),表示该数据个数第2行\(n\)个整数,你需要判断是否符合题意的数据对每组数据,你可以对其作若干次(可以为零)如下操作:选取数据中的一个数\(a_i\)将其替换......
  • [Codeforces] CF1719C Fighting Tournament
    题目传送门另:多测不清空,WA两行泪题意Burenka正准备去观看一年中最有趣的体育活动——她朋友Tonya组织的格斗锦标赛。有n名运动员参加了大赛,标号分别为为1,2,...,n。第i名运动员的实力是\(a_i(1\lea_i\len)\)。每个运动员的实力是不同的,也就是说,数组a是n的一种......
  • [Codeforces] CF1728C Digital Logarithm
    题目传送门很奇妙的一道题,我想到了正解,但是又没有完全想到题意我们定义\(f(x)\)表示取出\(x\)在十进制下的位数。(如\(f(114514)=6,\;f(998244353)=9\))。形式化讲,就是\(f(x)=\lfloor\log_{10}x\rfloor+1\)。给定两个数组\(a\)和\(b\),求执行若干次以......
  • [Codeforces] CF1475C Ball in Berland
    BallinBerland-洛谷题意在毕业典礼上,有\(a\)个男孩和\(b\)个女孩准备跳舞,不是所有的男孩和女孩都准备结伴跳舞。现在你知道\(k\)个可能的舞伴,你需要选择其中的两对,以便使没有人重复地出现在舞伴里,求可能的数量。思路暴力最朴素,也是简单的方法,就是通过暴力组合进行配对。......
  • [Codeforces] CF1506C Epic Transformation
    EpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(*a_i\neqa_j*\) 然后删除 \(*a_i,a_j*\) 两个数。求序列 a 经过若干次操作后最少......
  • [Codeforces] CF1705C Mark and His Unfinished Essay
    题目传送门题意给定长度为\(n\)的字符串\(s\),进行\(c\)次操作,每次操作将\(s_l\)到\(s_r\)复制到字符串尾。全部操作结束后有\(q\)次询问,每次询问字符串\(s\)的第\(k\)位。数据保证\(r\)不超过当前字符串长度,\(k\)不超过最终字符串长度。思路及分析通过数......
  • [Codeforces] CF1858C Yet Another Permutation Problem
    YetAnotherPermutationProblem-洛谷这题本来很简单,思路我也想到了,但是代码一直没写对,思路也一直换来换去(悲然而发现最开始的思路是对的题意Alex收到了一个名为"GCD排列"的游戏作为生日礼物。这个游戏的每一轮进行如下操作:首先,Alex选择一个整数序列\(a_1,a_2,…,a_......
  • Codeforces Round 905 (Div. 3)
    CodeforcesRound905(Div.3)A.Morning题意:操作:显示,向前走都为一次操作;目标:显示这四个数思路:0->10,然后依次作差就行#include<bits/stdc++.h>usingnamespacestd;voidsolve(){chara[4];intmi=100,sum=4,b[4];for(inti=0;i<4;i++){cin>>a[i]......
  • Codeforces Round 903 (Div. 3)
    CodeforcesRound903(Div.3)A.Don'tTrytoCount大概题意给你两个字符串a,b。a串可进行的操作为将整个a串复制到之前的a串后面(直接用a+a即可),然后看操作多少次可以让b串变为a串的子串如果不能就输出-1。#include<iostream>usingnamespacestd;stringa,b;voidsolve()......
  • Codeforces Round 910 (Div. 2)
    CodeforcesRound910(Div.2)A.MilicaandString解题思路:统计给定字符串\(s\)中的\(B\)的数量,记录为\(cnt\)。如果\(cnt==k\):输出0;如果\(cnt<k\):从左往右数,将第\(cnt-k\)个\(A\)的位置前的数全部变成\(B\).如果\(cnt>k\):从左往右数,将第\(k-cnt\)个\(B\)的......