Wannafly挑战赛24-A,B,C

A-石子游戏:https://www.nowcoder.com/acm/contest/186/A

Wannafly挑战赛24-A,B,C_第1张图片

思路:对于大于1的奇数分析,对于3 可以分为1,2,然后2与其他偶数合并,总共2次;考虑最后的偶数也与其他偶数合并,那么对于5可以分成 1,4 (2次)和 3,2 (4次),7和分为 1,6(2次),3,4(4次)和 5,2(6次)可以发现大于1的奇数的操作次数都是偶数次,那么说明奇数对于结果是没有影响的,只要对偶数个数考虑,当偶数个数为偶数是为Bob赢,为奇数则为 Alice赢,对于特殊情况,只有一个奇数时同样成立,而全为 1时则是 Bob赢

Code :

#include
using namespace std;

int main()
{
	int n,s2=0,x,p=0;
	cin>>n;
	for(int i=0;i>x;
		if(x%2==0)	++s2;
		if(x>1)	p=1;
	}
	string str="Alice";
	if(!p||s2%2)	str="Bob";
	cout<

 

B-222333 :https://www.nowcoder.com/acm/contest/186/B

Wannafly挑战赛24-A,B,C_第2张图片

思路:dalao博客:http://www.cnblogs.com/skylee03/p/9649849.html

Wannafly挑战赛24-A,B,C_第3张图片

Code :

#include
#include
using namespace std;
typedef long long LL;

const int MAX_S=10000005;
int p;
int d[MAX_S];

int main()
{
	int a,b;
	while(cin>>p){
		memset(d,0,sizeof(d));
		int s=3;
		for(int i=1;i<=p;s=s*3%p,++i)
			if(!d[s])	d[s]=i;
			else	break;
		LL n=p-2,inv=1,ai=2;
		while(n){
			if(n&1)	inv=inv*ai%p;
			ai=ai*ai%p;
			n>>=1;
		}
		s=inv;
		int sum=p+1;
		for(int i=1;i<=p&&ii+d[s]){
				a=i;	b=d[s];
				sum=a+b;
			}
		cout<

 

C-失衡天平 :https://www.nowcoder.com/acm/contest/186/C

Wannafly挑战赛24-A,B,C_第4张图片

思路:唉,好菜啊我,dalao博客:http://www.cnblogs.com/ccut-ry/p/9649813.html

易知在放置时操作多次其实和操作一次最终的效果是一样的
dp[i][j] : 在第 i 个物品天平两边相差为 j 的最大收益,
dp[i][j] = max(dp[i][j], dp[i-1][j]);     //不选的情况
dp[i][j+x] = max(dp[i][j+x], dp[i-1][j]+x);  //同侧
dp[i][abs(j-x)] = max(dp[i][abs(j-x)], dp[i-1][j]+x);  //异侧

Code :

#include
#include
#include
#include
using namespace std;

const int MAX_N=105;
const int MAX_S=100005;
int n,m;
int dp[MAX_N][MAX_S];

int main()
{
	memset(dp, -1, sizeof(dp));
	dp[0][0]=0;
	scanf("%d%d",&n,&m);
	for(int i=1,x;i<=n;++i)
	{
		scanf("%d",&x);
		for(int j=0;j

 

你可能感兴趣的:(DP,数论,牛客,博弈)