您是汤姆·索耶(Tom Sawyer),必须粉刷一下102400 m长的篱笆。幸运的是,您的朋友决定帮助您交换各种东西。每个朋友会画画大号米,从开始小号颜色Ç。小号,大号是米整数量和1≤ ç ≤97感到厌烦你决定要找出你有各种颜色的多少米。
输入项
从标准输入读取输入。如上所述,每行包含三个数字S,L,C。
乌普特
输出被写入标准输出。对于最终栅栏上出现的每种颜色,请打印颜色编号及其出现的次数。按颜色排序。
例子
输入0
..............
0 3 1 111...........
2 4 2 112222........
1 2 3 133222........
0 4 1 111122........
7 3 5 111122.555....
输出0
1 4
2 2
5 3
输入1
0 100 1
50 150 2
输出1
1 50
2 150
输入2
500 1000 1
0 2000 2
输出2
2 2000
更多例子
这是一个小型发电机:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
/* From http://en.wikipedia.org/wiki/Random_number_generation */
unsigned m_w;
unsigned m_z;
unsigned get_random()
{
m_z = 36969 * (m_z & 65535) + (m_z >> 16);
m_w = 18000 * (m_w & 65535) + (m_w >> 16);
return (m_z << 16) + m_w; /* 32-bit result */
}
int main(int argc, char **argv)
{
int i;
assert(argc == 2);
m_w = 0xbabecafe;
m_z = atoi(argv[1]);
i = 10;
while (i--);
get_random();
i = atoi(argv[1]);
while (i--) {
int s = (int) ((get_random() << 8) % 102397);
int l = (int) ((get_random() << 8) % (102397 - s));
int c = (int) ((get_random() << 8) % 97 + 1);
printf("%d %d %d\n", s, l, c);
}
return 0;
}
运行示例:
$ ./gen 1 | ./paint
6 535
$ ./gen 10 | ./paint
28 82343
36 3476
41 1802
49 4102
82 1656
$ ./gen 100 | ./paint
2 2379
22 17357
24 4097
25 1051
34 55429
42 9028
45 9716
66 1495
71 196
85 640
97 706
$ ./gen 1000 | ./paint
16 719
26 29
28 24
33 1616
55 371
65 35
69 644
74 16
84 10891
86 36896
87 50832
89 19
$ ./gen 10000 | ./paint
3 800
6 5712
14 3022
17 16
26 1
29 18770
31 65372
37 387
44 40
49 37
50 93
55 11
68 278
70 19
71 64
72 170
77 119
78 6509
89 960
97 15
$ ./gen 100000 | ./paint
2 6
8 26
12 272
24 38576
26 1
34 1553
35 8
36 19505
43 2
45 11
46 2
47 9
49 27339
50 139
53 3109
69 11744
92 89
$ ./gen 1000000 | ./paint
1 1
3 4854
6 523
13 1
16 11
18 416
22 7
24 3920
25 96
31 10249
32 241
37 1135
45 10
57 758
62 2348
65 11
66 7422
78 6
85 13361
87 3833
88 187
91 46
93 7524
96 45436
您的程序必须在合理的时间内运行。在上一个示例中,我的解决方案只需几秒钟即可运行。
最短的代码胜出。
包括运行时间和上次测试的输出。
编辑:此问题不旨在被强行使用,所以一个简单的解决方案是不可接受的。
在我看来,最简单的方法(分配数组,填充数组,计算数组中每种颜色的数量,输出)将在合理的时间内运行。不过,您似乎想提出一种算法来应对挑战,但我想错了吗?
—
马修(Matthew)
我当时以为1000000 ops X 25000平均长度= 25 * 10 ^ 9不会在合理的时间内运行。否则,我可以增加围栏的长度。
—
Alexandru
啊,我很想念输入的内容是一百万行,这很糟糕。
—
马修(Matthew)
@基思:ITYM 英制单位:en.wikipedia.org/wiki/Imperial_units
—
Paul R
基思:我想您可以假设今天的汤姆·索亚(Tom Sawyer)会更明智,并使用SI。
—
乔伊(Joey)