zwznb edited 4 年,11 月前
我按照题解的方法,叠加了相同的时间,注意了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;
}
已解决,是代码有问题,这题坑好多555
是9月月赛的C题划水