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;
}