求助J T2思路
  • 板块学术版
  • 楼主2c_s
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/21 16:42
  • 上次更新2023/11/2 12:13:57
查看原帖
求助J T2思路
583186
2c_s楼主2023/10/21 16:42

rt.

另附代码求调

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define fi first
#define se second
using namespace std;
inline ll read(){
	ll k=0,flag=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')flag=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		k=(k<<1)+(k<<3)+(c^48);
		c=getchar();
	}
	return k*flag;
}
inline void print(ll x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    ll y=10,len=1;
    while(y<=x){
        y=(y<<1)+(y<<3);
        len++;
    }
    while(len--){
        y/=10;
        putchar(x/y+48);
        x%=y;
    }
}
inline char readc(){
	char c=getchar();
	while(c==' '||c=='\n')c=getchar();
	return c;
}
const int N=2e5+10;
ll n,d,a[N],b[N],now,ans;
int main(){
	cin>>n>>d;
	for(int i=1;i<n;++i)a[i]=read();
	for(int i=1;i<=n;++i)b[i]=read();
	for(int i=1;i<n;++i){
		int pos=n;
		ll dis=a[i];
		for(int j=i+1;j<=n;++j){
			if(b[j]<b[i]){
				pos=j;
				break;
			}
			dis+=a[j-1];
		}
		ll num;
		dis-=now;
		if(dis%d==0)num=dis/d;
		else num=dis/d+1;
		now=num*d-dis;
		ans+=num*b[i];
		i=pos-1;
		//cout<<ans<<" "<<pos<<" "<<num<<" "<<now<<"\n";
	}
	cout<<ans;
	return 0;
}
2023/10/21 16:42
加载中...