P9741 「KDOI-06-J」翻转与反转题解
yuanbao2013 · · 题解
前言
打比赛的时侯手动模拟了一下,发现了一个能 AC 的规律,于是想发篇题解
前置芝士:list
list 是 c++ 的双向链表,使用如下。
list<int>my_list;//定义一个空list
bool e=my_list.empty()//返回list是否为空
int s=my_list.size()//返回list的长度
my_list.push_front(114514)//在链表前面插入114514
my_list.push_back(1919810)//在链表后面插入1919810
int f=my_list.front()//返回链表最前面的数
int b=my_list.back()//返回链表最后面的数
my_list.pop_front()//删除链表最前面的数
my_list.pop_back()//删除链表最后面的数
思路
看图:
我们可以发现如果
code
#include<bits/stdc++.h>
using namespace std;
int n,a[2000001];
list<int>l;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(n%2==i%2)
l.push_front(!a[i]);
else
l.push_back(a[i]);
}
while(!l.empty()){
printf("%d ",l.front());
l.pop_front();
}
return 0;
}