Time Limit:1000ms
Case Time Limit:1000ms
Memory Limit:512MB

Description

Heshen was an official of the Qing dynasty. He made a fortune which could be comparable to a whole country's wealth by corruption. So he was known as the most corrupt official in Chinese history. But Emperor Qianlong liked, or even loved him so much that was not punished during Qianlong's regime even everybody knew he was totally corrupted.

After Qianlong quit his job, his son Jiaqing took the throne. The new Emperor hated Heshen very much, so he threw Heshen into jail and awarded him death immediately after Qianlong died. Of course Jiaqing would not forget to raid Heshen's house for money --- that was the story of "Heshen fell, Jiaqing full."

Jiaqing's man got a notebook from Heshen's home which was obviously an account book.But the text of the book was written in English! Jiaqing thought all numbers in that account book should stand for money. Please find out all numbers for Jiaqing.

The text of the account book consists only lower case letters, spaces, and digits
('0' - '9'). One or several consecutive digits form a number. But Jiaqing only cared about the ACTUAL numbers among all numbers. Only if a number DOESN'T satisfy any of the conditions below, it is an ACTUAL number:

1) The character to the left of the number is a lower case letter, for example: a123

2) The character to the right of the number is a lower case letter, for example: 123b

3) The number has one or more extra leading zeros, such as 01 , 0012….

Please note that if the last character of a line is a digit, and the first character of the next line is also a digit, those two digits are considered consecutive.

Input

There are no more than 200 lines. The length of each line is no more than 1000 characters.

And it is guaranteed that every number's length is no more than 18.

There may be spaces at the end of a line, and those spaces matter.

No blank lines in the input. A line consisting of only spaces is not a blank line.

Output

Print all ACTUAL numbers in a single line in the original order.
Then, count the number of ACTUAL numbers of each line, and print them. A number X only belongs to the line which contains the first digit of X.

Sample Explanation

We assume there is no spaces at the end of each line in the Sample Input.

In the sample input, the '3' at the end of the second line and the '2' at the beginning of the third line are considered consecutive, so "1323" is a number.  But this number only belongs to the second line, so the third line has only 2 numbers ---- 14 and 344..

Sample Input
a19 01 17b
12 bdc 13
23 14 344 bc
Sample Output
12 1323 14 344
0
2
2

题意就是给你一段文本,让你从里面找出来所有的ACTUAL  numbers,就是找出来数字,仅由0-9的数组成,没有字母,并且没有前导零。输出来所有满足条件的数字,然后再输出每一行有多少个数字。

有一个小tip:如果上一行的最后一个是数字,下一行的开头也是数字,要连在一起,计数的时候记到上一行,下一行就不计这个数。

这个题是真的自闭,写得好的(姿势对的)一次就能过,写不好的,写到没脾气也过不了。交了26遍才过。。。

可能是我太捞了,也可能就是不能用getchar,用getchar写的过不了,用getline写的可以过。

数据怎么结束输入,就是输完数据换行之后按Ctrl+Z就可以了。

题目坑点:

1.因为题目上说数字的长度最长不超过18,我一开始眼瞎没看到,写的int,后面改成用字符串存的。

2.上一行最后一个如果为数字,下一行的开头也是数字的话,要连在一起。这里有好几个坑点样例:上一行最后如果满足并且只有一个数字为0,下一行为满足的数字,那么连在一起是不满足的,这是有前导零的情况。如果只有一个零,这是满足的。还有一种是上一行最后是满足情况的数字,但是下一行是不满足的,比如上一行最后为124,下一行开头为3456c,这种事不满足的。然后就是接下来的几行都是数字,比如第一行为erty 56,第二行为2462,第三行为357245,这种是都要连在一起的。还有就是上一行最后是不满足情况的,但是最后一个是数字的,这种是不满足的,举例:上一行最后为c124,下一行开始为45674,这种情况下,45674是不计数的,因为连在一起是不满足情况的。

3.题目上说的是文本仅由小写字母,数字和空格组成,所以要考虑一下空格,如果上一行为r45 (空格)下一行为123,那么123是不受上面的影响的。

4.我感觉数据可能有点迷,也可能是我太捞了,因为题目上说文本只由小写字母,数字和空格组成,但是样例输入的话肯定是需要换行才能输入下一行的吧,要不然怎么输入下一行???我读入数据的时候,用getchar读入,通过判断是否为回车来换行,应该没错吧,因为题目上说了没有空行,只有空格的行不是空行,但是我getchar可以读入空格呀,没毛病呀,老铁。但是我这样并没有写过,不管我程序中间判断字母的时候最后是通过换行判断还是通过长度是否等于该行长度判断,都不对,而且我后面试了不存换行,也写不过,但是我换成getline读入,就过了。特意去查了一下getline,系统默认情况下,getline是一行一行读入,用字符串存数据就可以,回车结束输入,或者读完文件结束。但是从某种方面来讲,测试数据也是通过换行写下一行的,所以讲道理,我用getchar读数据应该也不会错才对,但是我getchar就是过不了,最后改成getline才能过。也可能是我用vector存数据存错了???,不知道啊,真是让人没脾气的暴力模拟题。

可能坑点个人总结的不完整,代码注释里写了,而且一些特殊样例自己也猜出来了,存了一下。贴到下面。

直接代码:

 //B-字符串暴力模拟-A了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<deque>
#include<iomanip>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<istream>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii; const double PI=acos(-1.0);
const double eps=1e-;
const ll mod=1e9+;
const int inf=0x3f3f3f3f;
const int maxn=+;
const int maxm=2e5+;
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); //vector<char> ve[maxn];
vector<string> ans;
int num[maxn];
string str[maxn];
string ve[maxn]; int main()
{
char c;
int n=;
int tmp=;
// while((c=getchar())!=EOF){
// ve[n].push_back(c);
// if(c=='\n') n++;
// }
while(getline(cin,ve[tmp++])){}
// for(int i=0;i<tmp-1;i++){
// for(int j=0;j<str[i].size();j++){
// ve[n].push_back(str[i][j]);
// }
// ve[n].push_back('\n');
// n++;
// }
tmp--;
// cout<<tmp<<endl;
int flag=,flag1=,cnt=,ove=-,pos=-;//flag是前导零,数字中有字母的判断,flag1是判断上一行最后一个是不是数字,cnt为当前行数字个数计数,ove是上一行最后是否为满足的数字,pos为最后满足条件的数为第几行
string h;//用字符串暂时存数,害怕超范围
//for(int i=0;i<n;i++){
for(int i=;i<tmp;i++){
cnt=;int len=;
//char pre=*(ve[i].end()-2);//pre为当前行的最后是否为数字,以便来看是否会影响下一行
//for(auto it:ve[i]){//遍历
for(int j=;j<ve[i].size();j++){
len++;
if(flag1==) flag=,flag1=;//如果上一行的最后一个字母为数字,并且为不满足的条件,举例:c12
//if(it>='0'&&it<='9'&&flag!=1){
if(ve[i][j]>=''&&ve[i][j]<=''&&flag!=){
if(h.size()==) //h+=it;
h+=ve[i][j];
else if(h[]==''){//如果存在前导零的条件,就标记flag,清空h,把上一行的去掉,因为多加了。
flag=,h.clear();
num[pos]--;pos=-;//位置标记赋初值
}
//else h+=it;
else h+=ve[i][j];
}
//else if(it==' ')
else if(ve[i][j]==' '){
if(ove==&&h.size()==){num[pos]--;pos=-;ove=-;}//上一行的最后是对的,但是和下一行接起来是错的,上一行要减去
if(h.size()!=){//如果为满足情况的数字
ans.push_back(h);
h.clear();
cnt++;
if(ove==) cnt--,pos=-,ove=-;//如果满足,并且是和上一行接起来的,这一行的不计数
}
h.clear(),flag=;//标记清空
}
//else if(it>='a'&&it<='z')
else if(ve[i][j]>='a'&&ve[i][j]<='z'){
if(ove==&&h.size()!=){//如果上一行为满足情况的数字
if(len==){//如果下一行的第一个为字母,说明不影响上一行,把上一行的数字存进去
ans.push_back(h);//上一行最后满足,当前行第一个为字母,为上一行的满足的
ove=-;pos=-;
}
else{
num[pos]--;pos=-;ove=-;//如果上一行最后和下一行的接起来是不满足的,那么就要减去上一行的,举例上一行最后为2355,下一行开始为34b
}
}
h.clear(),flag=;
}
if(j==ve[i].size()-){
if(h.size()!=){
ove=;
if(pos==-){
pos=i;cnt++;
}
}
else{
if(ve[i][ve[i].size()-]>=''&&ve[i][ve[i].size()-]<='') flag1=;
ove=-;
}
flag=;
}
// else if(it=='\n'){
// if(h.size()!=0){//当前行最后为满足的
// ove=1;//标记
// if(pos==-1){//如果当前位置未标记,说明是满足情况的最一开始的行数,举例,第一行最后为22,下一行为5467,再下一行为3234,标记为22的位置
// pos=i;cnt++;//记录位置
// }
// }
// else{
// if(pre>='0'&&pre<='9') flag1=1;//特殊情况,一种是c23这种,下一行开头如果为数字是不成立的,另一种就是前导零,如果上一行最后为0,接下来几行都是数字,那么接下来的几行都是不满足的
// ove=-1;
// }
// flag=0;//标记清空
// }
}
num[i]=cnt;
if(i==tmp-&&h.size()!=){
ans.push_back(h);//如果为最后一行并且最后的满足,那么就加进去
}
}
vector<string>::iterator it;
for(it=ans.begin();it!=ans.end();it++){//输出所有数字
if(it!=ans.end()-) cout<<*it<<" ";
else cout<<*it<<endl;
}
// for(int i=0;i<n;i++)//输出每一行的数字个数
// cout<<num[i]<<endl;
for(int i=;i<tmp;i++)
cout<<num[i]<<endl;
}

这代码写的无语啊。

下面是我想的样例:

 /*

 in1
a19 01 17b
12 bdc 13
23 14 344 bc out
12 1323 14 344
0
2
2 in2
a19 01 17b
12 bdc 13 0
23 14 344 bc out
12 13 14 344
0
2
2 in3
a19 01 17b
12 bdc 13 0
cd 14 344 bc out
12 13 0 14 344
0
3
2 in4
a19 0 17b
12 bdc 13 0
cd 14 344 bc out
0 12 13 0 14 344
1
3
2 in5
a19 01 17b
12 bdc 13
(有一个空格) 23 14 0 bc out
12 13 23 14 0
0
2
3 in6
4
3
2
1 out
4321
1
0
0
0 in7
12 13
b
v
c out
12 13
2
0
0
0 in8
12 13
b
d
0 out
12 13 0
2
0
0
1 in9
12 c13
21 34 out
12 34
1
1 in10
0
0
0 out
0
0
0 in11
0 out
0
1 in12
12 a15 9
12356
54wf 6 out
12 6
1
0
1 in13
12 0
23
45
67 78 out
12 78
1
0
0
1 in14
a19 01 9
123 (有一个空格)
56t 67 out
9123 67
1
0
1 */

极度自闭的暴力模拟题,谁头发多或者闲得无聊,这是一个好题。

hihoCoder #1871 : Heshen's Account Book-字符串暴力模拟 自闭(getline()函数) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction B) 2018 ICPC 北京区域赛现场赛B的更多相关文章

  1. Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机

    题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...

  2. 【最小割】【Dinic】HihoCoder - 1252 - The 2015 ACM-ICPC Asia Beijing Regional Contest - D - Kejin Game

    题意:有一个技能学习表,是一个DAG,要想正常学习到技能x,要将指向x的技能全部先学到,然后会有一个正常花费cx.然后你还有一种方案,通过氪金dx直接获得技能x.你还可以通过一定的代价,切断一条边.问 ...

  3. 【BFS】【枚举】HihoCoder - 1251 - The 2015 ACM-ICPC Asia Beijing Regional Contest - C - Today Is a Rainy Day

    题意:给你两个只由1~6组成的串,问你B串至少要经过几次操作变成A串. 一次操作要么选择一个种类的数,将其全部变成另一种类:要么选择一个数,将其变为另一个数. 可以证明,一定先进行一定数量的第一种操作 ...

  4. hihoCoder #1870 : Jin Yong’s Wukong Ranking List-闭包传递(递归) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction A) 2018 ICPC 北京区域赛现场赛A

    P1 : Jin Yong’s Wukong Ranking List Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Desc ...

  5. 2018/7/31-zznuoj-问题 A: A + B 普拉斯【二维字符串+暴力模拟+考虑瑕疵的题意-0的特例】

    问题 A: A + B 普拉斯 在计算机中,数字是通过像01像素矩阵来显示的,最终的显示效果如下:  现在我们用01来构成这些数字 当宝儿姐输入A + B 时(log10(A)<50,log10 ...

  6. HDU 4467 Graph(图论+暴力)(2012 Asia Chengdu Regional Contest)

    Description P. T. Tigris is a student currently studying graph theory. One day, when he was studying ...

  7. HDU 3697 Selecting courses(贪心+暴力)(2010 Asia Fuzhou Regional Contest)

    Description     A new Semester is coming and students are troubling for selecting courses. Students ...

  8. HDU 3699 A hard Aoshu Problem(暴力枚举)(2010 Asia Fuzhou Regional Contest)

    Description Math Olympiad is called “Aoshu” in China. Aoshu is very popular in elementary schools. N ...

  9. hihoCoder #1586 : Minimum-结构体版线段树(单点更新+区间最值求区间两数最小乘积) (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1586 : Minimum Time Limit:1000ms Case Time Limit:1000ms Memory Limit:256MB Description You are give ...

随机推荐

  1. ES6中函数的扩展

    一.设置默认参数 ES6之前,给函数设置默认参数是这样做的: function fn(a) { if(typeof y === undefined){ a = a || 'hello'; } cons ...

  2. C11简洁之道:tupe元祖

    tuple元组是一个固定大小不同类型的值的集合,是泛化的std::pair.我们也可以把它当作一个通用的结构体来使用,不需要创建结构体有获取结构体特征,在某些情况可以取代结构体,使程序更简洁.直观. ...

  3. Linux 文件编码问题及iconv命令

    iconv命令是运行于linux/unix平台的文件编码装换工具.当我们在linux/unix系统shell查看文本文件时,常常会发现文件的中文是乱码的,这是由于文本文件的编码与当前操作系统设置的编码 ...

  4. 【hdu1828/poj1177】线段树求矩形周长并

    题意如图 题解:这题非常类似与矩形面积并,也是维护一个被覆盖了一次以上的线段总长. 但是周长要算新出现的,所以每次都要和上一次做差求绝对值. x轴做一遍,y轴做一遍. 但是有个问题:矩形边界重合的时候 ...

  5. Ubuntu 修改IP地址

    Ubuntu 修改IP地址1.ubuntu系统修改IP地址:sudo vim /etc/network/interfacesauto eth0iface eth0 inet staticaddress ...

  6. Part2-HttpClient官方教程-Chapter1-基础

    前言 超文本传输协议(HTTP)可能是当今Internet上使用的最重要的协议.Web服务.网络支持的设备和网络计算的增长继续扩展了HTTP协议在用户驱动的Web浏览器之外的作用,同时增加了需要HTT ...

  7. 数组返回NULL绕过

    BUGKU:http://120.24.86.145:9009/19.php 还没看完源码,我就直接加了一个password[]=1结果就拿到flag了.然后再看源码我自己都搞不懂为什么可以得到源码. ...

  8. java===java基础学习(3)---数据类型转换,运算符级别,枚举类型

    数据类型转换: 有的时候,程序需要将数据类型,比如 int + float ,结果是float, 这里的int就被转换为float类型,属于合法转换. Java中的合法转换如下图: 红色表示无信息丢失 ...

  9. 自动化测试===Macaca环境搭建,自我总结

    安装jdk 安装安卓sdk(打开sdk的时候出现问题linux===启动sdk manager下载配置sdk的时候报错的解决办法) 安装gradle,配置环境变量(MACACA===gradle下载和 ...

  10. vue点击切换颜色限制个数(用了mui框架)

    vue点击切换颜色 只能点击一个 <!doctype html> <head> <meta charset="UTF-8"> <title ...