比赛 20120418x 评测结果 AAAAAAAAEAATTE
题目名称 猴子和香蕉 最终得分 71
用户昵称 201101 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-18 17:17:30
显示代码纯文本
/*
UID:cheepok
PID:monkeys
*/

#include<stdio.h>
#include<set>

using namespace std;

typedef long long Int;

Int n,m,x[21],y[21];

set <Int> s[2],S;

set <Int> :: iterator it;

bool flag[100000000];

int main()
{
	freopen("monkeys.in","r",stdin);
	freopen("monkeys.out","w",stdout);
	Int i,j,k,tmp,tmp1;
	scanf("%I64d%I64d",&n,&m);s[0].insert(0);
	for(i=1;i<=m;i++)scanf("%I64d%I64d",&x[i],&y[i]);
	for(i=1;i<=n;i++)
	{
		k=i&1;s[k].clear();
		for(it=s[!k].begin();it!=s[!k].end();it++)
		{
			tmp=*it;
			for(j=1;j<=m;j++)
			{
				if(tmp%(x[j]-1)==0)
				{
					tmp1=tmp/(x[j]-1)*x[j]+y[j];
					if(tmp1>1000000000)continue;
					if(tmp1<100000000){
					if(flag[tmp1])continue;
					else flag[tmp1]=true;}
					s[k].insert(tmp1);
					S.insert(tmp1);
				}
			}
		}
	}
	scanf("%I64d",&k);
	if(S.size()<k)printf("-1\n");
	else
	{
		it=S.begin();
		for(i=1;i<k;i++)it++;
		printf("%I64d\n",*it);
	}
	return 0;
}