维护中
include<bits/stdc++.h>
using namespace std;
int n,ans,k;
int main()
{
cin>>n;
while(n)
{
ans++;
if(k==0&&n%3==1)k=ans;
if(n%3==0)n-=n/3;
else n-=n/3+1;
}
cout<<ans<<" "<<k;
return 0;
}
/*
每次会拿去 <n/3> 个苹果,所以每次减去这部分。而如果此时
n mod 3 刚好为1,则这一天也可以拿走第 n 个苹果。
I am thank for you,CSP! 想了半天90分
*/
#include<bits/stdc++.h>
using namespace std;
long long a[100005],b[100005];
int main()
{
int n;
long long ans=0,d;
b[0]=LONG_LONG_MAX-1;//元题解是0x3f3f3f3f,但这样更香
cin>>n>>d;
for(int i=1;i<n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
cin>>b[i];
b[i]=min(b[i],b[i-1]);//b[i]是在前面数据中已发现的最小值
}
//是时候展现真正的技术了
long long sum=0;
for(int i=1;i<n;i++)
{
sum+=a[i];
if(b[i]!=b[i+1]||i==n-1)//b[i]!=b[i+1]意味油价下跌
{
int k=0;
if(sum%d!=0) k++;//如果行驶的不是整数,
ans+=(sum/d+k)*b[i];//sum/d代表所需油量,
//+k表示还要再买1L,
//*b[i]就是当前价格
sum=-( ((sum/d+k)*d)%sum );
//如有多余的汽油可以再跑,就减去离下一站的路程
}
}
cout<<ans;
return 0;
//誊抄题解是个极好的学习方法,
//我怎么才发现?
//
}
标签:总结,int,n%,long,LONG,ans,J2023,CSP
From: https://www.cnblogs.com/happy-salted-fish/p/18059960