CodeForces Round 898 (div 4)

D题.Strong Vertices

大致思路

  • 对于题目的给的式子,au-av>=bu-bv,我们可以通过移项得到au-bu>=av-bv,这样就能够构造出来一个ai-bi的项出来
  • 对于构造出来的项,我们可以遍历一遍用数组把每一个项存起来,找到值最大的项,值最大的项所对应的下标就是强顶点

完整代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N =2e5+10;
int a[N];
int b[N];
int n;
void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)cin>>b[i];
	vector<int>ans(n);//存储每一项
	int j=0;
	for(int i=1;i<=n;i++)
	{
		int target=a[i]-b[i];
		ans[j++]=target;
	}
	sort(ans.begin(),ans.end());//排序方便找到最大值
	set<int>res;//存强顶点的下标
	int cnt=0;
	for(int i=1;i<=n;i++)//因为要从小到到输出就顺序遍历
	{
		int target=a[i]-b[i];
		if(target==ans[n-1])
		{
			cnt++;
			res.insert(i);//找到强顶点并把下标存进去
		}
	}
	cout<<cnt<<endl;
	for(auto x:res)cout<<x<<" ";
	cout<<endl;
}

signed main()
{

    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
      solve();
    }
    return 0;
}

 

 

 posted on 2024-08-04 21:40  熙玺  阅读(2)  评论(0编辑  收藏  举报

Shu-How Zの小窝

Loading...