求大佬解惑555

zwznb edited 4 年,10 月前

我按照题解的方法,叠加了相同的时间,注意了long long ,思路也基本上按照题解,过了16个点,说明思路问题不大,不知道哪里踩坑了,本来应该有答案的,我在17个点输出了-1

#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<cstdio>
#include <unordered_map>
using namespace std;
typedef long long ll;
const int N=1e6+10;
const ll mod=1e9+7;
int a[N],b[N];
ll c[N],d[N];
int main(){
	ll res=-1;
	ll n,m,t,s;
	cin>>n>>m>>s>>t;
	int i;
	for(i=1;i<=m;i++){
		scanf("%d%d",&a[i],&b[i]);
	}
	int cnt=1;
	c[1]=a[1];
	d[1]=b[1];
	for(i=2;i<=m;i++){
		if(a[i]>1e8)
		continue;
		while(a[i]==c[cnt]){
			d[cnt]+=b[i];
			i++;
		}
		if(i>m)
		break;
		cnt++;
		c[cnt]=a[i];
		d[cnt]=b[i];
	}
	for(i=1;i<=cnt;i++){
		ll tmp=c[i]-1;
		if(s+(tmp-1)/t*s>=n){
			res=tmp-(n-s)/s;
		}
		n-=d[i];
		if(n<=0)
		break;
	}
	if(i>m){
		res=1e8-(n-s)/s;
		if(res<0)
		res=-1;
	}
	cout<<res<<endl;
}
 

Comments

zwznb

已解决,是代码有问题,这题坑好多555

zwznb

是9月月赛的C题划水