2 条题解
-
1
链表初尝试
#include<iostream> using namespace std; int a[101],t[101]; int get(int a){ int x=0; for(int i=0;i<a;i++) x=t[x]; return x; } int main(){ int n,x1,x2,y1,y2; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; t[i-1]=i; } cin>>x1>>x2>>y1>>y2; t[x1-1]=y1; t[y2]=(y1-x2)==1?x1:t[x2]; t[y1-1]=(y1-x2)==1?y2+1:x1; t[x2]=y2+1; for(int i=1;i<=n;i++) cout<<a[get(i)]<<" "; return 0; }
-
1
emmmmmmm明天就要开学了,前两天请了假你猜我去干啥啦?这道题的正常做法很简单,我这里提供一种手写队列的
超级简单的做法#include<cstdio> using namespace std; int a[220]; int n,x1,x2,x3,x4; struct quene{ int left,right; int que[110000]; void init(){left=1;right=0;}//初始化:清空队列 void push(int i){que[++right]=i;}//在队尾加入元素i void pop_left(){left++;}//弹出队首元素 int prileft(){return que[left];}//返回队首元素 int priright(){return que[right];}//返回队尾元素 void push_long(int i,int j) { for (int k=i;k<=j;k++) { push(a[k]); } }//把a数组中下表i到j的元素入队 };//用结构体写一个队列 int main() { quene dl;//建立一个队列 scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); } scanf("%d%d%d%d",&x1,&x2,&x3,&x4); dl.init();//清空队列 bool rudui1_2=false,rudui3_4=false;//标记x1_x2,x3_x4元素均未入队 for (int i=1;i<=n;i++)//循环读入的数 { if(!(i>=x1&&i<=x2)&&!(i>=x3&&i<=x4))//没有在调换区间 { dl.push(a[i]);//入队 } else if ((i>=x1&&i<=x2))//在x1-x2区间并且3-4未入队 { if (rudui3_4==false) { dl.push_long(x3,x4);//将x3-x4区间元素入队 rudui3_4=true; } else { continue; } } else if (rudui1_2==false) { dl.push_long(x1,x2);//将x1-x2区间元素入队 rudui1_2=true; } } for (int i=1;i<=n;i++) { printf("%d ",dl.prileft());//输出队首元素 dl.pop_left();//弹出队首元素 } return 0; }
- 1
信息
- ID
- 374
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 91
- 已通过
- 46
- 上传者