USACO 3.1 Humble Numbers

TASK: humble
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 3416 KB]
   Test 2: TEST OK [0.000 secs, 3416 KB]
   Test 3: TEST OK [0.000 secs, 3416 KB]
   Test 4: TEST OK [0.000 secs, 3416 KB]
   Test 5: TEST OK [0.000 secs, 3416 KB]
   Test 6: TEST OK [0.054 secs, 3416 KB]
   Test 7: TEST OK [0.000 secs, 3416 KB]
   Test 8: TEST OK [0.000 secs, 3416 KB]
   Test 9: TEST OK [0.000 secs, 3416 KB]
   Test 10: TEST OK [0.000 secs, 3416 KB]
   Test 11: TEST OK [0.000 secs, 3416 KB]
   Test 12: TEST OK [0.108 secs, 3416 KB]

All tests OK.
1 /*
2 PROG: humble
3 ID: jiafeim1
4 LANG: C++
5 */
6 #include <algorithm>
7 #include <iostream>
8 #include <fstream>
9
10 using namespace std;
11
12 #include <set>
13
14 int num[105];
15 int pindex[105];
16 int hum[100005];
17 int main()
18 {
19 std::ifstream fin("humble.in");
20 std::ofstream fout("humble.out");
21
22 set<long long> ls;
23 ls.insert(1);
24
25 int num_amount, n;
26 fin >> num_amount >> n;
27
28 for (int i = 0; i != num_amount; ++i)
29 {
30 fin >> num[i];
31 }
32
33 sort(num, num + num_amount);
34 int count = 1;
35 hum[0] = 1;
36 set<long long>::iterator iter;
37 bool enough = false;
38 long long max = 0;
39 int min,minn;
40 while (count < n + 1)
41 {
42 min = 0x7FFFFFFF;
43 minn = -1;
44 for (int i = 0; i < num_amount; i++)
45 {
46 while ((double)num[i] * hum[pindex[i]] <= hum[count-1])
47 pindex[i]++;
48
49 if ((double)num[i] * hum[pindex[i]] < min)
50 {
51 min = num[i] * hum[pindex[i]];
52 minn = i;
53 }
54 }
55
56 hum[count++] = min;
57 pindex[minn]++;
58 }
59
60 fout << hum[n] << endl;
61 fin.close();
62 fout.close();
63 return 0;
64 }
posted @ 2011-05-10 23:19  幻魇  阅读(256)  评论(0编辑  收藏  举报