SH8. Kolakoski
描述
输入描述
输入由两行组成: 第一行包括两个正整数 n, m 第二行包括 m 个正整数 a[] 数据规模与限制: 0 < n < 10000 1 < m < 1000 0 < a[i] < 1000 a[i] 不等于 a[i + 1] a[0] 不等于 a[m-1]输出描述
每行一个数字,共 n 行 整数组 a 生成的 Kolakoski 序列的前 n 项示例1
输入:
30 4 2 1 3 1
输出:
2 2 1 1 3 1 2 2 2 1 3 3 1 1 2 2 1 3 3 3 1 1 1 2 1 3 3 1 1 2
C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2020-11-21
#include <bits/stdc++.h> using namespace std; int main(){ int n, m; scanf("%d%d", &n, &m); int a[m], s[n]; for(int i=0;i<m;i++) scanf("%d", &a[i]); for(int i=0,p=0,k=0;i<n;){ if(i == p) s[p] = a[k]; for(int j=0;j<s[p] && i<n;j++){ printf("%d\n", a[k]); s[i++] = a[k]; } k = (k+1)%m; p++; } return 0; }
C++ 解法, 执行用时: 3ms, 内存消耗: 504KB, 提交时间: 2020-07-08
#include <bits/stdc++.h> using namespace std; int n, m; int main(){ scanf("%d %d", &n, &m); int num[n]; for(int i = 0; i < m; i++){ scanf("%d", &num[i]); } vector<int> v; for(int i = 0; i < num[0]; i++){ v.push_back(num[0]); } int nownum = 1; int li = 1; while(v.size() < n){ if(li == v.size()){ int tmp = li; li = num[li]; for(int i = 0; i < li; i++){ v.push_back(num[nownum]); } li = tmp + 1; } else{ for(int i = 0; i < v[li]; i++){ v.push_back(num[nownum]); } li++; } nownum = (nownum + 1) % m; } for(int i = 0; i < n; i++){ printf("%d\n", v[i]); } return 0; }
C++ 解法, 执行用时: 4ms, 内存消耗: 376KB, 提交时间: 2020-10-31
#include <iostream> #include <vector> #include <cstdio> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> a(m); for(int &x: a) cin >> x; vector<int> result; int i = 1; int cur = 1; for(int k = 0; k < a[0]; ++k) result.push_back(a[0]); if(a[0] == 1){ for(int k = 0; k < a[1]; ++k) result.push_back(a[1]); ++i; ++cur; cur %= m; } while(result.size() < n){ for(int k = 0; k < result[i]; ++k){ result.push_back(a[cur]); } ++cur; ++i; cur %= m; } for(int k = 0; k < n; ++k){ //cout << result[k] << endl; printf("%d\n", result[k]); } }
C++ 解法, 执行用时: 4ms, 内存消耗: 376KB, 提交时间: 2020-10-31
#include <iostream> #include <vector> #include <cstdio> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> a(m); for(int &x: a) cin >> x; vector<int> result; int i = 1; int cur = 1; for(int k = 0; k < a[0]; ++k) result.push_back(a[0]); if(a[0] == 1){ for(int k = 0; k < a[1]; ++k) result.push_back(a[1]); ++i; ++cur; cur %= m; } while(result.size() < n){ for(int k = 0; k < result[i]; ++k){ result.push_back(a[cur]); } ++cur; ++i; cur %= m; } for(int k = 0; k < n; ++k){ //cout << result[k] << endl; printf("%d\n", result[k]); } }
C++ 解法, 执行用时: 4ms, 内存消耗: 400KB, 提交时间: 2020-12-23
#include <iostream> #include <vector> #include <cstdio> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> a(m); for(int &x: a) cin >> x; vector<int> result; int i = 1; int cur = 1; for(int k = 0; k < a[0]; ++k) result.push_back(a[0]); if(a[0] == 1){ for(int k = 0; k < a[1]; ++k) result.push_back(a[1]); ++i; ++cur; cur %= m; } while(result.size() < n){ for(int k = 0; k < result[i]; ++k){ result.push_back(a[cur]); } ++cur; ++i; cur %= m; } for(int k = 0; k < n; ++k){ //cout << result[k] << endl; printf("%d\n", result[k]); } }