概述
思路:
本题比较难想,但一旦想到是区间合并的话就很简单了,对于每个数就扩成一个区间去处理就完事了,合并完区间后会发现每个区间的长度之和就是答案
Code:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int,int> PII;
const int N = 200;
void solve()
{
PII q[N];
int a[N],b[N];
vector<PII> ans;
int n;
cin>>n;
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++) q[i]={a[i]-b[i]+1,a[i]};
sort(q,q+n);
int mmax=q[0].first;
int las=q[0].first;
for(int i=0;i<n;i++)
{
if(q[i].first<=mmax)
{
if(q[i].second<=mmax) continue;
mmax=q[i].second;
}
else
{
ans.push_back({las,mmax});
mmax=q[i].second;
las=q[i].first;
}
}
ans.push_back({las,mmax});
long long sum=0;
for(auto i:ans)
{
long long t=i.second-i.first+1;
sum+=t*(t+1)>>1;
}
cout<<sum<<endl;
}
int main()
{
int _;
cin>>_;
while(_--) solve();
return 0;
}
最后
以上就是花痴御姐为你收集整理的Codeforces C. Monsters And Spells的全部内容,希望文章能够帮你解决Codeforces C. Monsters And Spells所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复