hdu4861 找规律了
生活随笔
收集整理的这篇文章主要介绍了
hdu4861 找规律了
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题意:
给你k个球和一个整数p,每个球的价值是 1^i+2^i+...+(p-1)^i (mod p),两个人轮流取球,最后谁的总价值也大谁就赢,问你先手能不能赢。
思路:
一开始我的感觉是无论怎么样先手都会赢,结果一看给的测试数据,soga那么也就只有两中情况,先手赢或者平手(真不公平),据说是数学题,反正我是不会推,直接打个表看一下,发现规律很水啊,下面给出打表代码和ac代码。
ac代码
#include<stdio.h>
int main ()
{
int k ,p;
while(~scanf("%d %d" ,&k ,&p))
{
k/(p-1)%2 ? puts("YES") : puts("NO");
}
return 0;
}
打表代码
#include<stdio.h>
#include<math.h>
int main ()
{
int i ,j ,sum;
printf("10 3\n");
for(i = 1 ;i <= 10 ;i ++)
{
sum = 0;
for(j = 1 ;j < 3 ;j ++)
sum = sum + int (pow(j * 1.0 ,i * 1.0)) % 3;
printf("%d " ,sum % 3);
}
printf("\n10 5\n");
for(i = 1 ;i <= 10 ;i ++)
{
sum = 0;
for(j = 1 ;j < 5 ;j ++)
sum = sum + int (pow(j * 1.0 ,i * 1.0)) % 5;
printf("%d " ,sum % 5);
}
getchar();
}
给你k个球和一个整数p,每个球的价值是 1^i+2^i+...+(p-1)^i (mod p),两个人轮流取球,最后谁的总价值也大谁就赢,问你先手能不能赢。
思路:
一开始我的感觉是无论怎么样先手都会赢,结果一看给的测试数据,soga那么也就只有两中情况,先手赢或者平手(真不公平),据说是数学题,反正我是不会推,直接打个表看一下,发现规律很水啊,下面给出打表代码和ac代码。
ac代码
#include<stdio.h>
int main ()
{
int k ,p;
while(~scanf("%d %d" ,&k ,&p))
{
k/(p-1)%2 ? puts("YES") : puts("NO");
}
return 0;
}
打表代码
#include<stdio.h>
#include<math.h>
int main ()
{
int i ,j ,sum;
printf("10 3\n");
for(i = 1 ;i <= 10 ;i ++)
{
sum = 0;
for(j = 1 ;j < 3 ;j ++)
sum = sum + int (pow(j * 1.0 ,i * 1.0)) % 3;
printf("%d " ,sum % 3);
}
printf("\n10 5\n");
for(i = 1 ;i <= 10 ;i ++)
{
sum = 0;
for(j = 1 ;j < 5 ;j ++)
sum = sum + int (pow(j * 1.0 ,i * 1.0)) % 5;
printf("%d " ,sum % 5);
}
getchar();
}
总结
以上是生活随笔为你收集整理的hdu4861 找规律了的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: hdu4846 最大子正方形(dp)
- 下一篇: hdu4862 费用流(不错)