站外提求助
  • 板块学术版
  • 楼主Linco2012
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/11/19 16:18
  • 上次更新2024/11/19 18:42:33
查看原帖
站外提求助
1165146
Linco2012楼主2024/11/19 16:18

代码:

#include<iostream>
#include<cmath>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<list>
#include<stack>
#include<queue>
#include<cstdio>
using namespace std;
struct stone
{
	long long x;
	long long a;
}c[200001];
bool cmp(stone a,stone b)
{
	return a.x<b.x;
}
long long num(int k)
{
	long long sum=0;
	while(k)
	{
		sum+=k;
		k--;
	}
	return sum;
}
int main()
{
	long long n,m,sum=0;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>c[i].x;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>c[i].a;
		sum+=c[i].a;
	}
	c[m+1].x=n+1;
	sort(c+1,c+1+m,cmp);
	if(sum==n)
	{
		if(c[1].x==1)
		{
			long long ans=0;
			for(int i=1;i<=m;i++)
			{
				if(c[i].a<c[i+1].x-c[i].x)
				{
					cout<<-1;
					return 0;
				}
				else
				{
					ans+=num(c[i+1].x-c[i].x-1);
				} 
			}
			cout<<ans;
		}
		else
		{
			cout<<-1;
		}
	}
	else
	{
		cout<<-1;
	}
	return 0;
}

2024/11/19 16:18
加载中...