您的位置:首页 > 其它

Codeforces Round #334 (Div. 2)

2015-12-09 10:18 363 查看
这次题目挺有意思的,可惜D题差几分钟没交对。E题的博弈还是很基础的SG函数,让我复习了下博弈。

A - Uncowed Forces

基本的输入输出,一个公式输出来即可,但是要注意的是,写之前先化简变成全为整数的情况。

#include <iostream>
#include <stdio.h>
using namespace std;
#define MOD 1000000007
int g[1001000];
int mark[1001000];
int main(int argc, const char * argv[]) {
int p,k;
cin>>p>>k;
if(k==0)
{
long long ans=1;
for(int i=1;i<p;i++)
ans=ans*p%MOD;
cout<<ans;
return 0;
}
for(int i=0;i<p;i++)
{
g[i] = ((long long)i*k)%p;
}
long long ans=1;
for(int i=0;i<p;i++)
{
if(mark[i]) continue;
mark[i]=1;
long long tmp=1;
int ti = g[i];
while(ti!=i)
{
mark[ti]=1;
tmp++;
ti=g[ti];
}
long long tk=1;
for(int j=0;j<tmp;j++)
tk=(tk*k)%p;
if(tk==1) ans=ans*p%MOD;
else ans*=1;
}
cout<<ans;
return 0;
}


View Code
E - Lieges of Legendre

我在开始想这题的时候,忘了sg函数,想凭找规律找到结果。 结果我想多了,对于一半的情况是可以找规律的,但是另一半我是始终没找出来,我想如果聪明人应该还是可以通过规律做出这题。通过这题我也知道挂不得区域赛什么的,博弈题很少,因为博弈题套路固定,而且基本上就那几种特殊的博弈。巴什,威佐夫,nim。难的估计太难大家又不会了。o(╯□╰)o

像我一样,忘记sg函数的或者还不会的可以看这里:博弈SG函数

知道了SG函数后,这题其实只需要分k为奇偶的情况先定义好f(1),f(2),f(3)。然后就是普通求SG函数的套路,因为数据量达到10^9,所以有些情况可以优化下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: