码迷,mamicode.com
首页 > 其他好文 > 详细

AGC 022 C - Remainder Game

时间:2018-07-12 20:46:34      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:main   put   div   ace   inline   问题   mes   tps   long   

题面在这里!

 

    显然权值是 2^i 这种的话就是要你贪心,高位能不选就不选。

    并且如果 % x 之后再去 % 一个>=x的数是没有用的,所以我们可以把操作的k看成单调递减序列。

    这样的话就是一个有向图联通性问题了,直接做就可以了。

 

#include<bits/stdc++.h>
#define ll long long
using namespace std;

int n,a[55],b[55];
bool v[55][55];
ll ans=0;

inline bool can(){
	memset(v,0,sizeof(v));
	for(int i=1;i<=50;i++) if((1ll<<i)&ans)
		for(int j=0;j<=50;j++) v[j][j%i]=1;

	for(int i=0;i<=50;i++) v[i][i]=1;

	for(int k=0;k<=50;k++)
		for(int i=0;i<=50;i++)
		    for(int j=0;j<=50;j++) if(v[i][k]&&v[k][j]) v[i][j]=1;

	for(int i=0;i<n;i++) if(!v[a[i]][b[i]]) return 0;
	return 1;
}

int main(){
	scanf("%d",&n),ans=1ll<<51,ans-=2;
	for(int i=0;i<n;i++) scanf("%d",a+i);
	for(int i=0;i<n;i++) scanf("%d",b+i);

	if(!can()){ puts("-1"); return 0;}

	for(int i=50;i;i--){
		ans^=1ll<<i;
		if(!can()) ans|=1ll<<i;
	}

	printf("%lld\n",ans);
	return 0;
}

 

AGC 022 C - Remainder Game

标签:main   put   div   ace   inline   问题   mes   tps   long   

原文地址:https://www.cnblogs.com/JYYHH/p/9301749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!