2016CCPC 合肥--最大公约数//每一年通向它的路上,多少人折戟沉沙,多少人功败垂成,有人一战成名,有人从头再来。

有这样一个有关最大公约数的函数:
函数 f(x, y):

{     c=0     当 y>0:     {          c +=1          t = x % y          x = y          y = t      }      返回 c * x * x}

给出三个正整数n,m,p,你需要计算:

∑i=1n∑j=1m?i?jf(i,j)

对p取模的结果。

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <stack>
 4 #include <algorithm>
 5 #include <cstring>
 6 #include <vector>
 7 #include <cmath>
 8 #include <cctype>
 9 using namespace std;
10 typedef long long ll;
11 void in(int& n){scanf("%d",&n);}
12 void in(ll& n){scanf("%I64d",&n);}
13 const int N = 700;
14 int gcd[N][N],num[N][N];
15 int n,m,p;
16 ll calc(ll x,ll y,ll tot,ll cnt)//tot 个数 cnt  分母
17 {
18     ll ans = (tot+1)*(x*y)+(tot+1)*tot/2*(y*y);//总和
19     ll rd = y*y%cnt;
20     ll ra = y*x%cnt;
21     ll res = 0; //余数
22     /*for(int i=0;i<=tot;++i){res+=(i*rd+ra)%cnt;}
23     return (ans-res)/cnt%p;
24     */ //复杂度太高
25     for(int i=0;i<cnt;++i){
26         res += (rd*i+ra)%cnt;
27     }
28     res = tot/cnt*res;
29     for(int i=0;i<=tot%cnt;++i)
30     {
31         res += (rd*i+ra)%cnt;
32     }
33     return  (ans-res)/cnt%p;
34 }
35 void init()
36 {
37     for(int i=0;i<N;i++)
38         for(int j=0;j<N;j++)
39             if(i==0||j==0) gcd[i][j]=i+j;
40             else if(i<j) gcd[i][j] = gcd[i][j%i];
41                  else gcd[i][j] = gcd[i%j][j];
42     for(int i=1;i<N;i++)
43         for(int j=0;j<i;j++)
44         {
45             if(j==0) num[i][j] = 1;
46             else num[i][j] = num[j][i%j] +1;
47         }
48 }
49 int main()
50 {
51     init();
52     int T;
53     scanf("%d",&T);
54     while(T--)
55     {
56         int ans = 0;
57         scanf("%d%d%d",&n,&m,&p);
58         for(int i=1;i<=m;i++)
59             for(int j=0;j<i&&j<=n;j++)
60             {
61                 ans+=calc(j/gcd[i][j],i/gcd[i][j],(n-j)/i,num[i][j]);
62                 ans%=p;
63             }
64         printf("%d\n",ans);
65     }
66     return 0;
67 }

AC代码

因为计算被m限制  变成了m个等差数列   求数列每一项/cnt 之和

但是  但是  裸计算余数复杂度太大

所以    就是现场  看懂了题。。。也A不掉。。。。然后贴的这个余数 转化为cnt的计算方式。。。

肯定是以cnt长度为循环。。。tot/cnt个循环 
余下的tot%cnt 再求一次即可

那么复杂度就降下来了

时间: 2024-11-06 11:03:53

2016CCPC 合肥--最大公约数//每一年通向它的路上,多少人折戟沉沙,多少人功败垂成,有人一战成名,有人从头再来。的相关文章

hdu 5963 朋友(2016ccpc 合肥站 C题)

朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 215    Accepted Submission(s): 137 Problem Description B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的:给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下

hdu1722 bjfu1258 辗转相除法

这题就是个公式,代码极简单.但我想,真正明白这题原理的人并不多.很多人只是随便网上一搜,找到公式a了就行,其实这样对自己几乎没有提高. 鉴于网上关于这题的解题报告中几乎没有讲解原理的,我就多说几句,也不是严格的证明,给大家分享一下. 题目是说有p人或q人吃蛋糕,需要提前把蛋糕切好而能同时满足这两种情况,使蛋糕的块数最少.为了方便表述,不妨设p < q 首先,记p和q的最小公倍数为m,则把蛋糕平均切成m块,一定是能满足条件的,但这不是最优解,暂记为解法①. 我们的工作就是把解法①的这m块中的一些尽

算法笔试

1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向.   10  / \  6  14 / \ / \4  8 12 16 转换成双向链表4=6=8=10=12=14=16.  首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode{  int m_nValue; // value of node  BSTreeNode *m_pLeft; // left child of

数学故事

发信人: ukim (我没有理想), 信区: Mathematics 标 题: Heroes in My Heart ( 序 ) 发信站: 北大未名站 (2002年04月06日14:23:24 星期六), 转信 --------------------------------- To Music For the Encouragement and Smiles She Gave Me --------------------------------- 序 废话几句. 多年以前,我有一个很宏伟的计

《孙子兵法》中的企业领导艺术和方法

<孙子兵法>被誉为“世界古代第一兵书”.“兵学圣典”,如今日益受到企业领导者的关注,而日本企业家又率先将<孙子>之思想应用于企业的经营管理,堪称一大智举. <孙子兵法>这部生于本土.源于本土,高度浓缩和体现我国人民大智.大学的传世杰作,其思想和影响在今天已超出军事领域,深入到政治.经济等社会生活的各个方面.今天在加速推进我国企业管理现代化的进程中,作为身逢盛世的我国企业家和经营者,深入学习和研究<孙子兵法>中关于现代企业领导艺术的方法可供借鉴的思想,有着至关

iOS Unity3D游戏引擎入门③

欢迎来到第三部分,这是Unity 3D for iOS初级系列教程的最后一个部分!在这个系列的第一部分,你参观了基本的Unity工具,创建了带有一个简单角色控制机制的游戏,并且学习了如何部署你的项目到iOS上. 然后在这个系列的第二部分,你增强了你英勇的小方块的移动,并且给这个世界带来一些生命,它拥有了天空,草地和一个起伏的地形. 在第三部分,也是最后一部分,你将要添加游戏玩法到项目中.替代简单的绕着场景乱转,你英勇的小方块需要在一个给定的时间里,冲刺穿过一个终点线.要给你的角色一些挑战,在方块

Unity3D for iOS初级教程:Part 3/3(上)

转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111738.html 欢迎来到第三部分,这是Unity 3D for iOS初级系列教程的最后一个部分!在这个系列的第一部分,你参观了基本的Unity工具,创建了带有一个简单角色控制机制的游戏,并且学习了如何部署你的项目到iOS上. 然后在这个系列的第二部分,你增强了你英勇的小方块的移动,并且给这个世界带来一些生命,它拥有了天空,草地和一个起伏的地形. 在第三部分,也是最后一部分,你将

越狱Season 1-Episode 6: Riots, Drills and the Devil: Part 1

Season 1, Episode 6: Riots, Drills and the Devil: Part 1 - Diamond: Just a few more rides. 就再多玩几次吧 Oh, great! Great! 噢太棒了! Then you have to wrap it up. wrap: 包,裹 玩好了就该走了 -Kellerman: Oh, Adam's getting bigger, huh? 噢 Adam看上去长大了点 Ten. Hmm 十岁嗯? - Diamon

辟谣网站能在中国活下来吗?辟谣网站能在中国活下来吗?

据<人民日报>报道,截止到今年8月,全国首个辟谣平台:北京地区网站联合辟谣平台已经成立两周年,辟谣总数量达到200万之巨,其中不乏一些救人民于水火的经典案例,目前,已经有45家网站加入辟谣行列,共同维护人民的合法权益,比如,2015年4月,网上流传出"草莓乙草胺超标,会引发癌症"的谣言,一时间,草莓价格先中国股市两个月进行了惨绝人寰的下跌,种植草莓的农民损失惨重,堪比中国散户,但随后辟谣平台联合相关农业部门,针对草莓进行了抽样检查,发现全国各地200余样品均无超标现象,而专