补题:
A - Xu Xiake in Henan Province
题目大意:签到题,让你去做徐霞客qwq
代码:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n;
cin.tie(0);
cout.tie(0);
cin>>n;
int a[10005];
while(n--){
int cnt=0;
for(int i=0;i<4;i++)
{
cin>>a[i];
if(a[i]!=0){
cnt++;
}
}
if(cnt==0){
cout<<"Typically Otaku"<<endl;
}
if(cnt==1){
cout<<"Eye-opener"<<endl;
}
if(cnt==2){
cout<<"Young Traveller" <<endl;
}
if(cnt==3){
cout<<"Excellent Traveller"<<endl;
}
if(cnt==4){
cout<<"Contemporary Xu Xiake"<<endl;
}
}
return 0;
}
I - Distance
这道题昨天晚上比赛的时候想的复杂了,但是总的思路是没有毛病的。
其实是这样的,我们用比赛时候的图理解一下
比如说第二张图,距离和就是在第一张图的基础上加上这个点到其他点的距离,然后需要对点的下标进行分类,如果说点的下标(从1开始)是奇数,那么dif不需要增加;当i是偶数的时候,dif就需要加上这个点到其他点的距离和。
代码:
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 1e5+5;
int main(){
int t;
cin.tie(0);
cout.tie(0);
cin>>t;
long long n,ans[maxn],left,right;
long long a[maxn],dis,dif;
while(t--){
cin>>n;
a[1]=0;
for(int i=2;i<=n;i++){
cin>>dis;
a[i]=a[i-1]+dis;
}
// for(int i=1;i<=n;i++){
// cout<<a[i]<<endl;
// }
left=0;
right= n + 1;
ans[1]=0;
dif=0;
//cout<<a[left]<<" "<<a[right-1]<<endl;
for(int i=1;i<=n;i++){
if(i&1){
left++;
ans[i]=ans[i-1]+dif;
//cout<<ans[i]<<endl;
}
else{
right--;
dif+=a[right]-a[left];
ans[i]=ans[i-1]+dif;
//cout<<ans[i]<<endl;
}
}
cout<<ans[1];
for(int i=2;i<=n;i++){
cout<<" "<<ans[i];
}
cout<<endl;
}
return 0;
}