B
和上海那题异曲同工的构造题
补图真是个好东西
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=55;
int t,n;
int a[N];
int main()
{
int t;
cin>>t;
while(t--){
vector<int>ans1,ans2;
cin>>n;
ll sum1=0,sum2=0,sum=0;
for(int i=0;i<n;i++){
cin>>a[i];
if(i%2==0){
sum1+=a[i]-1;
ans1.push_back(a[i]);
ans2.push_back(1);
}else{
sum2+=a[i]-1;
ans1.push_back(1);
ans2.push_back(a[i]);
}
sum+=a[i];
}
//cout<<sum1<<" "<<sum2<<" "<<sum<<endl;
if(sum1>sum2){
for(int i=0;i<ans1.size();i++){
cout<<ans1[i]<<" ";
}
}else{
for(int i=0;i<ans2.size();i++){
cout<<ans2[i]<<" ";
}
}
cout<<endl;
}
}
C
模拟题
我觉得模拟题就是要逻辑
#include<iostream>
using namespace std;
typedef long long ll;
const int INF = 1e9+5;
const int N=1e5+5;
int t,n;
int tm[N],p[N];
bool check(int l,int r,int x){
if(l>r) swap(l,r);
return l<=x&&x<=r;
}
void solve()
{
cin>>n;
for(int i=0;i<n;i++){
cin>>tm[i]>>p[i];
}
tm[n]=INF;
int at=0,to=0,cnt=0;
for(int i=0;i<n;i++){
if(at==to) to=p[i];
int lst=at;//at:next position
cout<<lst<<" "<<at<<"->"<<to<<" "<<endl;
ll delt=tm[i+1]-tm[i];
if(abs(to-at)<=delt) at=to;
else at=to<at?at-delt:at+delt;
if(check(lst,at,p[i])) cnt++;
}
//cout<<"***************"<<endl;
cout<<cnt<<endl;
}
int main()
{
cin>>t;
while(t--){
solve();
}
}