【BZOJ】2760: [JLOI2011]小A的煩惱【字串模擬】
阿新 • • 發佈:2018-10-31
2760: [JLOI2011]小A的煩惱
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 406 Solved: 258
[ Submit][ Status][ Discuss]
Description
小A是B公司的一名PM(product market)。B公司越來越注重產品使用情況分析,而小A的工作就是整天對著一堆資料分析來分析去,沒完沒了。其中有一個操作是小A很頭疼的,就是要把多個csv檔案的資料拷到同一個excel檔案中去。 有一天小A滿懷期待地找到了你,一個高階程式設計師,她想讓你寫程式幫她完成這個簡單重複性工作。這不是坑爹嗎,直接操作excel還要用到第三方的庫,還不如直接寫到csv檔案中,讓她再手動去轉成excel檔案。經過內部溝通協調,最終定下了這個方案。a | a | a |
b | b | |
c | c |
a | b | |||||
a1 | b1 | c1 | a1 |
b1 | c1 | d1 |
a2 | b2 | a2 | b2 | |||
a3 | b3 | c3 | ||||
a4 |
Input
第一行有一個整數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只包含小寫字母和“,”。
Output
輸出把N個檔案的資料合到一個檔案的結果。
Sample Input
22 a
a1,b1,c1
a2,b2
4 b
a1,b1,c1,d1
a2,b2
a3,b3,c3
a4
Sample Output
a,,,b,,,a1,b1,c1,a1,b1,c1,d1
a2,b2,,a2,b2,,
,,,a3,b3,c3,
,,,a4,,,
Solution
模擬題!
定了一個$flag$,表示第$i$行第$j$列這一格有沒有東西。
每次將列數取max往後平移即可。
本來以為自己亂yy的$string$過不了的QAQ
結果調了5分鐘就a掉了!!
氣死$Abyssful$是我的人生目標!!
Code
#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"); } }