NC20880. 小可爱序列
描述
输入描述
第一行两个数
n,m为序列长度,不同的操作“次数”
接下来m行,每行一个由数字+字母组成的字符串
保证所有的字符串只有一个字母,字符集S为S={'a','b'}并且只会在字符串最后一位出现。
字符串表示的是,要做的操作次数,操作类型。
比如“3a”就是你这一步要重复3次a操作,
"4b"就是这一步要重复操作4次b操作。
输出描述
一行用空格隔开的n个数,表示所有操作做完之后的序列
示例1
输入:
4 2 1 2 3 4 1a 2b
输出:
1 2 4 3
说明:
第一次做一次a操作 变为 4 1 2 3C++14(g++5.4) 解法, 执行用时: 35ms, 内存消耗: 504K, 提交时间: 2019-11-11 20:38:15
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e4+11; ll a[maxn],b[maxn]; int main() { int n,m; cin>>n>>m; for(int i=0;i<n;i++) cin>>a[i]; int p; char s; while(m--) { cin>>p>>s; if(s=='a') { p=p%n; for(int i=0;i<n;i++) b[(i+p)%n]=a[i]; for(int i=0;i<n;i++) a[i]=b[i]; } if(s=='b') { p=p%3; for(int i=0;i<3;i++) b[(i+p)%3]=a[i]; for(int i=0;i<3;i++) a[i]=b[i]; } } for(int i=0;i<n;i++)cout<<a[i]<<" "; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 30ms, 内存消耗: 608K, 提交时间: 2020-03-15 12:13:45
#include<bits/stdc++.h> using namespace std; int n,m,a[2005],p,b[2005]; char ch; int main() { cin>>n>>m; for(int i=0;i<n;i++) cin>>a[i]; for(int i=1;i<=m;i++) { cin>>p>>ch; if(ch=='a') { p%=n; for(int i=0;i<n;i++) b[(i+p)%n]=a[i]; for(int i=0;i<n;i++) a[i]=b[i]; } if(ch=='b') { p%=3; for(int i=0;i<3;i++) b[(i+p)%3]=a[i]; for(int i=0;i<3;i++) a[i]=b[i]; } } for(int i=0;i<n;i++) cout<<a[i]<<" "; return 0; }