NC20130. [JLOI2011]小A的烦恼
描述
a | a | a |
b | | b |
| c | c |
a | | | b | | | |
a1 | b1 | c1 | a1 | b1 | c1 | d1 |
| | | a2 | b2 | | |
| | | a3 | b3 | c3 | |
| | | a4 | | | |
输入描述
第一行有一个整数N(1≤N≤100),表示有N个文件。
以下N个数据块的第一行有一个整数M (1≤M≤100)和一个字符串S (1≤length(S)≤100),M表示文件的行数,S表示文件名。
N个数据块的下面M行中,每一行是一个字符串T(1≤length(T)≤100),T只包含小写字母和“,”。
输出描述
输出把N个文件的数据合到一个文件的结果。
示例1
输入:
2 2 a a1,b1,c1 a2,b2 4 b a1,b1,c1,d1 a2,b2 a3,b3,c3 a4
输出:
a,,,b,,, a1,b1,c1,a1,b1,c1,d1 a2,b2,,a2,b2,, ,,,a3,b3,c3, ,,,a4,,,
C++14(g++5.4) 解法, 执行用时: 44ms, 内存消耗: 34276K, 提交时间: 2020-01-23 14:51:54
#include<bits/stdc++.h> using namespace std; int n, m, flag[105][10005], cnt[105], lin, row, num[105]; char a[105]; string s; string qaq[105][10005]; int main() { scanf("%d", &n); int len = 0, ma = 0; for(int i = 1; i <= n; i ++) { scanf("%d", &m); scanf("%s", a); flag[1][++cnt[1]] = 1; qaq[1][cnt[1]] = a; int tmp = 1; for(int j = 2; j <= m + 1; j ++) { scanf("%s", a); int len = strlen(a); num[j] = 0; for(int k = 0; k < len; k ++) { char t = a[k]; if(t != ',') s = s + t; else { num[j] ++; cnt[j] ++; qaq[j][cnt[j]] = s; flag[j][cnt[j]] = 1; s.clear(); } } num[j] ++; cnt[j] ++; qaq[j][cnt[j]] = s; flag[j][cnt[j]] = 1; s.clear(); tmp = max(num[j], tmp); } lin = max(lin, m + 1); row += tmp; for(int j = 1; j <= 100; j ++) cnt[j] = row; } for(int i = 1; i <= lin; i ++) { for(int j = 1; j < cnt[i]; j ++) { if(flag[i][j]) cout << qaq[i][j]; printf(","); } if(flag[i][cnt[i]]) cout << qaq[i][cnt[i]]; printf("\n"); } }
C++11(clang++ 3.9) 解法, 执行用时: 14ms, 内存消耗: 2784K, 提交时间: 2020-03-10 12:29:47
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> using namespace std; const int M=1005; int n,m,l,T,cnt[M+5]; string temp,ans[M+5]; void init() { memset(cnt,0,sizeof(cnt)); cin>>n; m=max(m,n); cin>>temp; ans[0]+=temp; for(int i=1;i<=n;i++) { cin>>temp; ans[i]+=temp; for(string::iterator it=temp.begin();it!=temp.end();++it) cnt[i]+=*it==','; } l=*max_element(cnt+1,cnt+n+1); if(!T) l--; for(int i=0;i<M;i++) for(int j=cnt[i];j<=l;j++) ans[i]+=','; } int main() { cin>>T; while(T--) init(); for(int i=0;i<=m;i++) cout<<ans[i]<<endl; return 0; }