一.题目
二.样例分析
题目所述的(1)(2)(3)是算一次,而K=2是指要将(1)(2)(3)执行两遍后输入结果。
对于(1)步骤的结果:
[] 1 2
[] 30 40
[] 10 20
对于(2)步骤的结果:
[] 1 2
3 30 40
50 10 20
对于(3)步骤的结果:
30 1 2
3 30 40
50 10 20
我们可以分析一下结果和一开始的显示:
把该二维数组展示成一维数组的样子:
1 2 3 30 40 50 10 20 30
最后的结果是:
30 1 2 3 30 40 50 10 20
发现没有,其实就是一个循环数组,那我们就可以用个deque
三.deque容器概念
参考:STL教程(五):C++ STL常用容器之deque - 知乎 (zhihu.com)
C++ STL deque容器(详解版) (biancheng.net)
四.代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,m;
cin>>n>>m;
deque<int> a(n*m);
for(int i=0;i<n*m;i++) cin>>a[i];
int k;
cin>>k;
k%=n*m;
for(int i=0;i<k;i++){
a.push_front(a.back());
a.pop_back();
}
for(int i=0;i<n*m;){
cout<<a[i]<<" ";
i+=1;
if(i%m==0) cout<<endl;
}
return 0;
}