比赛 |
20120418x |
评测结果 |
AAAAAAATTAATTT |
题目名称 |
猴子和香蕉 |
最终得分 |
64 |
用户昵称 |
Makazeu |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-18 17:15:20 |
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <set>
#include <utility>
#define MAXN 101
#define fst first
#define snd second
using namespace std;
typedef set<int> SET;
pair<int,int> ban[21];
SET Set,tmp[2];
SET::iterator it,iter;
int N,C,K;
inline void init()
{
scanf("%d %d\n",&N,&C);
for(int i=1;i<=C;i++) scanf("%d %d\n",&ban[i].snd,&ban[i].fst);
scanf("%d\n",&K); int x;
for(int i=1;i<=C;i++) {Set.insert(ban[i].fst);tmp[0].insert(ban[i].fst);}
for(int i=0;i<N-1;i++)
{
for(it=tmp[i&1].begin();it!=tmp[i&1].end();it++)
{
x=*it; for(int j=1;j<=C;j++)
{
if(x%(ban[j].snd-1)!=0) continue;
Set.insert(x/(ban[j].snd-1)*ban[j].snd+ban[j].fst);
tmp[(i+1)&1].insert(x/(ban[j].snd-1)*ban[j].snd+ban[j].fst);
}
} tmp[i&1].clear();
}
}
int main()
{
freopen("monkeys.in","r",stdin);
freopen("monkeys.out","w",stdout);
init(); int i;
//for(iter=Set.begin();iter!=Set.end();iter++)
//printf("%d ",*iter);
//printf("\n");
if(K>Set.size()) {printf("-1\n"); return 0;}
for(iter=Set.begin(),i=2;i<=K;i++,iter++); printf("%d\n",*iter);
return 0;
}