//这道题就是说,给你个id号,给你个周期,然后每个周期就会输出一次id,对于测试样例,200先输出一次2004,然后300输出2005,400的时候就是2004,600时候两个都要输出,那么按id的升序输出2004然后2005,输出了5个数据了,结束了··· //前面说的全是废话,但是需要注意其周期为0的时候,就相当于优先级是最高的,所以总是输出其周期为0的且id号最小的那个! #include <iostream> #include <string> #include <set> #include <algorithm> using namespace std; struct Info { string str; int num; int p; }re[1005]; bool cmp(Info a, Info b) { return a.p < b.p; } set<int> ans; set<int>::iterator it; int main() { int i, k, j, l, c, temp; bool flag; for (i = 0; i < 1005; i++) { cin >> re[i].str; if (re[i].str == "#") break; else cin >> re[i].num >> re[i].p; } sort(re, re+i, cmp); temp = re[0].p; cin >> k; ans.clear(); c = 0; flag = false; while (1) { if (temp == 0) { for (j = 0; j < k; j++) cout << re[0].num << endl; break; } for (j = 0; j < i; j++) { if (temp % re[j].p == 0) ans.insert(re[j].num); } for (it = ans.begin(); it != ans.end(); it++) { cout << (*it) << endl; c++; if (c == k) { flag = true; break; } } if (flag) break; temp++; ans.clear(); } system("pause"); } /* Register 2002 1 Register 2003 0 Register 2004 200 Register 2005 300 # 5 Register 2002 0 Register 2003 0 Register 2004 0 # 5 Register 2002 1 Register 2003 1 Register 2004 1 # 5 */