A. Line Trip
题意是:有n个加油点,人要来回两趟,问你最少要多少油?
using namespace std;
int a[100];
void solve(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
int ans=a[1];
for(int i=2;i<=n;i++){
ans=max(ans,a[i]-a[i-1]);
}
ans=max(ans,2*(m-a[n]));
cout<<ans<<"\n";
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)solve();
return 0;
}
B. Chip and Ribbon
题意是:从点一出发,按顺序对每个位置+1,或者你可以跳跃,目的是让每个位置的值等于给的值,问你最少要跳跃多少次?
#define int long long
using namespace std;
const int N=2e5+10;
int a[N];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]>a[i-1]){
ans+=a[i]-a[i-1];
}
}
cout<<ans-1<<"\n";
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)solve();
return 0;
}
C. Add, Divide and Floor
题意是:每次操作是选一个x,然后对每个数组中的每个数加上x然后除以2,问你最少要进行多少次操作,时数组中的数相等,如果操作数小于等于数组长度,打印出每次操作的x
思路:猜想是,要是数组的所有数相等,那么是最大的和最小的相等,中间的一定相等,而且加上的x的大小其实并不影响操作数的大小,所以这里x只取1,0。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N];
void solve(){
int n;
cin>>n;
int mx=0;
int mi=1e9;
for(int i=1;i<=n;i++){
cin>>a[i];
mx=max(mx,a[i]);
mi=min(mi,a[i]);
}
vector<int>ans;
while(mi!=mx){
if(mi%2==mx%2){
ans.push_back(0);
}else if(mx%2==0){
ans.push_back(1);
mx++;
mi++;
}else{
ans.push_back(0);
}
mi/=2;
mx/=2;
}
cout<<ans.size()<<"\n";
if(ans.size()==0)return;
if(ans.size()<=n){
for(auto c:ans){
cout<<c<<" ";
}
}
cout<<"\n";
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)solve();
return 0;
}
标签:Educational,Rated,题意,int,158,void,mi,ans,mx
From: https://www.cnblogs.com/yufan1102/p/17855595.html