2760: [JLOI2011]小A的烦恼

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 406  Solved: 258
[Submit][Status][Discuss]

Description

小A是B公司的一名PM(product market)。B公司越来越注重产品使用情况分析,而小A的工作就是整天对着一堆数据分析来分析去,没完没了。其中有一个操作是小A很头疼的,就是要把多个csv文件的数据拷到同一个excel文件中去。
有一天小A满怀期待地找到了你,一个高级程序员,她想让你写程序帮她完成这个简单重复性工作。这不是坑爹吗,直接操作excel还要用到第三方的库,还不如直接写到csv文件中,让她再手动去转成excel文件。经过内部沟通协调,最终定下了这个方案。
csv是一种excel可支持和格式,且存储方式非常简单。它实际上就是用“,”来分隔相邻的两个列。比如以下三行数据
a,a,a
b,,b
,c,c
表示的就是
a a a
b   b
  c c
现在小A想做的就是把各个文件按照从左往右的顺序拷到同一个文件当中。比如文件a的数据是
a1,b1,c1
a2,b2
文件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      
这个结果在csv文件里就是
a,,,b,,,
a1,b1,c1,a1,b1,c1,d1
a2,b2,,a2,b2,,
,,,a3,b3,c3,
,,,a4,,,
以上结果的第一行是每一个文件的文件名,文件名与相应文件的第一列对齐。如果相应文件不止一列,那么其它列用空的单元格来补充。
输入的csv文件里保证了每一行的末尾都没有“,”,也就是说像a文件的第2行的第3列一样,如那一格是空的,那么在b2后面是没有“,”的。
输出的csv文件里因为是程序的输出结果,为了简化程序,如果末尾是空的,那么还是会显式输出“,”,如以上的结果所示。
输入文件保证至少有一行一列非空。
输出的文件要保证下一个文件的第一列要紧邻着上一文件的最后一个非空列的右面。最后一个文件只输出到最后一个非空列。

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

2
2 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[][], cnt[], lin, row, num[];
char a[];
string s;
string qaq[][]; int main() {
scanf("%d", &n);
int len = , ma = ;
for(int i = ; i <= n; i ++) {
scanf("%d", &m);
scanf("%s", a);
flag[][++cnt[]] = ;
qaq[][cnt[]] = a;
int tmp = ;
for(int j = ; j <= m + ; j ++) {
scanf("%s", a);
int len = strlen(a);
num[j] = ;
for(int k = ; 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]] = ;
s.clear();
}
}
num[j] ++;
cnt[j] ++;
qaq[j][cnt[j]] = s;
flag[j][cnt[j]] = ;
s.clear();
tmp = max(num[j], tmp);
}
lin = max(lin, m + );
row += tmp;
for(int j = ; j <= ; j ++) cnt[j] = row;
}
for(int i = ; i <= lin; i ++) {
for(int j = ; 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");
}
}

【BZOJ】2760: [JLOI2011]小A的烦恼【字符串模拟】的更多相关文章

  1. 题解【洛谷P5483】[JLOI2011]小A的烦恼

    我们可以灵活运用\(C++\)的语法来解决此题. 解释一下代码中会出现的语法: \(string::iterator\ it\)表示定义了一个\(string\)类型的迭代器\(it\),\(^*it ...

  2. 「BZOJ 3280」小R的烦恼

    题目链接 戳我 \(Solution\) 这道题很像餐巾计划啊. 首先将每天拆成\(x\)和\(x'\),\(S->x\)流量为\(a_i\),费用为\(0\)表示一天下来有\(a_i\)个濒死 ...

  3. 【模拟】bzoj2760 [JLOI2011]小A的烦恼

    注意细节和初始化. #include<cstdio> #include<string> #include<algorithm> #include<iostre ...

  4. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

  5. hunnu 小明的烦恼——找字符串

    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11544&courseid=0 小明的烦恼——找字符串 ...

  6. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  7. BZOJ3280: 小R的烦恼

    题解: 随便建一下图费用流就可以过吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath> #incl ...

  8. 《Mysql 公司职员学习篇》 第一章 小A的烦恼

    第一章  小A的烦恼 ----- 为什么学习数据库 和 如何选择数据库 小A是某公司的职员,公司数据部的员工,平常的大小工作,完全离不开EXCELL,而最近小A却越来越苦恼,不由的向好朋友小Y吐槽.小 ...

  9. hiho#1513 : 小Hi的烦恼 五维偏序

    hiho#1513 : 小Hi的烦恼 五维偏序 链接 hiho 思路 高维偏序用bitset,复杂度\((\frac{n^2}{32})\) 代码 #include <bits/stdc++.h ...

随机推荐

  1. oracle主键约束、唯一键约束和唯一索引的区别

    (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除: (2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空: (3)相同字段序 ...

  2. ubuntu 18.04 安装 flash

    下载源码包, 解压 sudo cp Downloads/flash_player_npapi_linux.x86_64/libflashplayer.so /usr/lib/mozilla/plugi ...

  3. Linux嵌入式交叉编译环境 的搭建【转】

    转自:http://blog.csdn.net/woaixiaozhe/article/details/7395435 1. 安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下 ...

  4. Linux内核抢占实现机制分析【转】

    Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介 ...

  5. HDU 2825 Wireless Password

    题目链接:HDU-2825 题意:给出m个单词,要构造出满足包含其中大于等于k个单词的字符串,字符只包括小写字母,问长度为n的这样的串有多少个. 思路:令dp[i][j][k]表示当前已经构造了i个字 ...

  6. C/C++杂记:运行时类型识别(RTTI)与动态类型转换原理

    运行时类型识别(RTTI)的引入有三个作用: 配合typeid操作符的实现: 实现异常处理中catch的匹配过程: 实现动态类型转换dynamic_cast. 1. typeid操作符的实现 1.1. ...

  7. 洛谷P1972 HH的项链

    传送门啦 分析: 题目描述不说了,大意是,求一段区间内不同元素的种数. 看到区间,我们大概先想到的是暴力(然后炸掉).线段树.树状数组.分块. 下面给出的是一种树状数组的想法. 首先,对于每一段区间里 ...

  8. Effective API Design

    Effective API Design */--> div.org-src-container { font-size: 85%; font-family: monospace; } Tabl ...

  9. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件

    前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤 ...

  10. CF 579A (二进制拆分)

    在培养皿中,每个细胞每天会繁殖,数量*2 我们可以在任意天加入任意数量的细胞入培养皿中. 想要知道最少加入多少个细胞,可以使得有一天,培养皿中细胞的数量会恰好为x 其实就是输出X的二进制中有多少个1 ...