- 吴易繁 的博客
八月(暑期集训)week2 DAY(0)3
- @ 2024-8-19 13:58:26
A. 小苹果
题目类型:数学
思路
可以发现,其实每一次下来要被拿走的苹果的个数是,所以只要不为,那么就要继续,那怎么判断第个苹果在这一轮是否被拿走呢?很简单,只要%,那么在这一次,第个苹果就要被拿走。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("apple.in","r",stdin);
freopen("apple.out","w",stdout);
int n,cnt=0,ans;
bool flag=1;
cin>>n;
while(n!=0){
cnt++;
if((n-1)%3==0&&flag==1) ans=cnt,flag=0;
n-=(n-1)/3+1;
}
cout<<cnt<<" "<<ans;
return 0;
}
B. 公路
题目类型:贪心
思路
实际上这题就是个贪心,我们可以在每次到下一个加油站的时候,比较一下有没有更小的油价,如果有的话,就需要更新油价,然后,我们再将从这个加油站到下一个加油站所需的最小价格用存起来,最后输出即可。
注意:如果要用的油不能把最小的油价整除的话,那么就要将用的油加一升。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int a[N],v[N];
signed main(){
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
int n,d;
cin>>n>>d;
for(int i=1;i<n;i++){
cin>>a[i];
a[i]+=a[i-1];
}
int mn=1e9,ans=0,sum=0;
for(int i=1;i<=n;i++){
cin>>v[i];
if(i==n) break;
mn=min(mn,v[i]);
int b=a[i]/d;
if(a[i]%d) b++;
ans+=(b-sum)*mn;
sum=b;
}
cout<<ans;
return 0;
}
代码没写出来,所以就写了个分的骗分,下一次一定要好好提升提升代码能力了。