您的位置:首页 > 其它

ACM/ICPC武汉赛区水题之GCC

2009-10-04 12:20 357 查看
这个题不难,刚开始很脑残的直接O(n^2)的边乘边模,结果TLE。WOJ算是给个面子,如果不TLE肯定直接WA,因为我弱智的用int去接收高达到10^100的数据,后来看了解题报告:因为当n>=m的时候后面的n! % m = 0.所以只要处理n<m的时候就好了.一句惊醒脑残人,于是稍加更改,submit之WA一个,原来0!=1这个条件没用对地方,改之,再交,又WA一个,找到测试数据,对比发现m比较大时结果越界了,改成__int64,AC。上码字:

#include<iostream>//令m上限是9999999,7位
#include<cstring>
char is[1010];
using namespace std;
int main()
{
__int64 tmp,m,n,i,j;
int cases;
scanf("%d",&cases);
__int64 sum,suma,k;
while(cases--)
{
k=1;
n=0;
memset(is,0,sizeof(is));
sum=suma=1;
scanf("%s%I64d",is,&m);
if(strlen(is)>7)
n=m-1;
else if(strlen(is)==7 && atoi(is)>=m)
n=m-1;
else
n=atoi(is);
for(j=1;j<=n;j++)
{
sum=j*sum%m;
suma+=sum;
suma%=m;
}
suma%=m;//防止0,1的数据
printf("%I64d/n",suma);
}
return false;
}


题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3123
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐