CF 643B
这样构造就可以了
a b
|中间连接|
c d
void solve(){
int n,k,a,b,c,d;
cin>>n>>k>>a>>b>>c>>d;
if(k<n+1||n==4){
cout<<-1<<'\n';
}
else{
vector<int>vis(n+1);
vis[a]=vis[b]=vis[c]=vis[d]=1;
cout<<a<<' '<<c<<' ';
for(int i=1;i<=n;++i){
if(!vis[i])cout<<i<<' ';
}
cout<<d<<' '<<b<<'\n';
cout<<c<<' '<<a<<' ';
for(int i=1;i<=n;++i){
if(!vis[i])cout<<i<<' ';
}
cout<<b<<' '<<d<<'\n';
}
return;
}
CF 644B
常规
void solve(){
int n,b;
cin>>n>>b;
deque<ll>q;
vector<ll>t(n),d(n);
for(int i=0;i<n;++i){
cin>>t[i]>>d[i];
}
for(int i=0;i<n;++i){
while(q.size()&&q.front()<=t[i]){
q.pop_front();
}
if(q.empty()){
q.push_back(t[i]+d[i]);
cout<<q.front()<<' ';
}else{
if(q.size()>b){
cout<<-1<<" ";
}else{
cout<<q.back()+d[i]<<' ';
q.push_back(q.back()+d[i]);
}
}
}
return;
}
CF 662D
长度为k的后缀可以表示$\sum_{1}^k(10^i)$个不同的值,那么我们加一下,然后每次加上base即可
void solve(){
int n;
cin>>n;
for(int i=0;i<n;++i){
string s;
cin>>s;
s=s.substr(4);
int num=stoi(s);
int base=10,tmp=0;
for(int i=1;i<s.size();++i){
tmp+=base;
base*=10;
}
while(1989+tmp>num)
num+=base;
cout<<num<<'\n';
}
return;
}
今晚开始要连面四场,有点难熬