无语凝噎(wordless)

寒蝉凄切,对长亭晚,骤雨初歇。都门帐饮无绪,留恋处,兰舟催发。执手相看泪眼,竟无语凝噎。念去去,千里烟波,暮霭沉沉楚天阔。
多情自古伤离别,更那堪,冷落清秋节!今宵酒醒何处?杨柳岸,晓风残月。此去经年,应是良辰好景虚设。便纵有千种风情,更与何人说!
——宋·柳永《雨霖铃》
字虽好,只是柳永伤感。执手相看泪眼,竟无语凝噎。太不合此情此景。
——爱新觉罗氏胤禛

西施与范蠡泛舟而去……不对,场景不对,咳咳。在甄嬛前往蓬莱洲之前,她与皇上在碧桐书院告别。为了这可能会长达数月的离别,两个人都似乎有很多话要对对方说,却都无语凝噎。这时,皇上突然发话:“嬛嬛啊,既然你我都说不出话来,那这时间也不好打发,我们来数三角形吧。”为了满足皇上突发而来的童趣,甄嬛欣然陪同了。可这……纸上是一张n*m的格子方阵,即有(n+1)*(m+1)个格点。每个格子都是边长为1的正方形。而他们要数的,则是任取3个格点作为三角形的顶点所形成的直角三角形且该三角形面积为s/2的个数。甄嬛数的头都晕了,她现在只想知道满足条件的三角形个数 mod (10^9+7)

输入格式:

第一行3个正整数n,m,s, 意义如题

输出格式:

仅一个整数,为甄嬛与满足条件的三角形个数 mod (10^9+7)

样例输入:

1 1 1

样例输出:

4

数据范围:

对于10%的数据:n<=10
对于另外40%的数据:s为质数
对于100%的数据:1<=n,m,s<=10^8

时间限制:

1S

空间限制:

128M

这题刚开始实在是想的太简单了,习惯性认为直角边都在网格上,其实不然,还有不在网格上的情况没有发现.

先说直角边在网格上的情况:

由于他是直角三角形,肯定被包含在一个合法矩形内,而每个矩形都包含了4个这种三角形,所以,我们枚举矩形的长宽a,b,对于每一组a,b,我们可以计算出这种情况中的直角三角形的总数.

总数为max(0,n-a+1)*max(0,m-b+1)*4+max(0,m-a+1)*max(0,n-b+1)*4.

再说直角边不在网格上的情况:

对于这一类直角三角形,我们总能在它边上找到两个相似三角形,如下图:

三角形abc边上总有两个相似三角形.我们设相似比为k,且k>=1.

在上图中,我们要知道a,b,k分别是多少,可以通过枚举的方法实现.

由于:AB*BC/2=S/2,则根号(a*a+b*b)*根号(ka*ka+kb*kb)=S,化简得k(a*a+b*b)=S.

由于S在1e8范围内,我们可以枚举a,b,用根号S*根号S的时间(其实远远不到).

由于我们要保证k>=1,所以a*a+b*b<=S.

而比例系数并不一定是整数,整数的应该是a,b,ka,kb,所以不能掉下这个坑啊.

在上图中,整个三角形的横向长度为la=a+kb,纵向长度为lb=max(b,ka);

所以这一种情况中,合法三角形数量为max(0,n-la+1)*max(0,m-lb+1).

由于可以旋转,即横向长度和纵向长度是相对的,所以可以将la和lb互换.

这种情况中,合法三角形数量为max(0,n-la+1)*max(0,m-lb+1).

又由于可翻转性和对称性,同一个形状的三角形(不考虑横纵向)在同一个矩形内可以算4次,即

合法三角形数量为max(0,n-la+1)*max(0,m-lb+1)*4+max(0,n-la+1)*max(0,m-lb+1)*4.

但是需要注意的是,当a*a+b*b=s的时候,说明k=1,即两个相似三角形全等.

此时,我们枚举的这个直角三角形对于横纵向其实是同样的情况(即不存在横纵向之分,或者说,在横向统计和纵向统计中都会统计到这一种三角形),所以这种情况

合法三角形数量为(max(0,n-la+1)*max(0,m-lb+1)*4+max(0,n-la+1)*max(0,m-lb+1)*4)/2.

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<cmath>
 6 #define LL long long
 7 using namespace std;
 8 const int TT=1000000007;
 9 int n,m,s,cnt,fac[20005];
10 LL ans,c1,c2,la,lb;
11 int main(){
12     cin>>n>>m>>s; cnt=0; ans=0;
13     for (int i=1; i<=sqrt(s); i++) if (s%i==0) fac[++cnt]=i;
14     for (int i=1; i<=cnt; i++){
15         c1=n-fac[i]+1,c2=m-(s/fac[i])+1;
16         if (c1>0&&c2>0) ans=(ans+(LL)c1*c2)%TT;
17         if (fac[i]*fac[i]==s) continue;
18         c1=m-fac[i]+1,c2=n-(s/fac[i])+1;
19         if (c1>0&&c2>0) ans=(ans+(LL)c1*c2)%TT;
20     }
21     ans*=4; ans%=TT;
22     for (LL a=1; a*a<=s; a++)
23         for (LL b=1; a*a+b*b<=s; b++){
24             LL t=a*a+b*b;
25             if ((s*a)%t==0&&(s*b)%t==0){
26                 la=a+(s*b)/t,lb=max((s*a)/t,b);
27                 c1=max(0LL,n-la+1),c2=max(0LL,m-lb+1);
28                 if (t==s) ans+=c1*c2*2; else ans+=c1*c2*4;
29                 c1=max(0LL,m-la+1),c2=max(0LL,n-lb+1);
30                 if (t==s) ans+=c1*c2*2; else ans+=c1*c2*4;
31                 ans%=TT;
32             }
33         }
34     printf("%lld",(ans+TT)%TT);
35     return 0;
36 }

时间: 2024-10-13 22:33:18

无语凝噎(wordless)的相关文章

无语凝噎

忽略如此玛丽苏的题目,这其实是一道数论题,40%的福利(素数). 自己拿张纸画一下,很快就能找出规律. program aa;const a=1000000007;var n,m,s,i:longint; sum:int64;function pd(n:longint):boolean;var i:longint;begin pd:=true; for i:=2 to trunc(sqrt(n)) do if (n mod i)=0 then begin pd:=false; break; en

&#24494;&#20449;JSSDK&#19982;&#24405;&#38899;&#30456;&#20851;&#30340;&#22353;

微信JSSDK与录音相关的坑 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷不丁地被坑一道, 让我时常想嘶吼: "微信JSSDK就是个大腊鸡!!!!!!!!!!" 现在工作得到阶段性成果, 有时间休息总结下, 故来整理一下这段时间碰到的bug, 希望做个前车之鉴, 劝大家谨慎入坑. checkJsApi 功能: 判断当前客户端版本是否支持指定JS接口 转载:  http://www.fwqtg.net/%E5%BE%AE%E4%BF%A1jssdk%E

我已长发及腰,君快归来可好

待我长发及腰,少年娶我可好?待你青丝绾正,铺十里红妆可愿?却怕长发及腰,少年倾心他人.待你青丝绾正,笑看君怀她笑.—题记 弦微冷,弄指三声,却断人肠,犹记那年月下,一眉好水,冷月映蒹葭.而今故人已去,独留一剪相思忆,半世痴情终成殇.浮华盈袖,掬半盏明月光,悠悠红尘忆你,心冷如霜.此生一别,来世再难相见,我把思念散入云际,任它穿越时空间距,寻你. 三千青丝,杳杳而立.我是千年前岸边跋涉的女子,临江盼影,自顾美丽.而你恰逢归期,白衣策马,面如冠玉.两眸相遇,跨越千年轮回,乱了时光.缱绻相视里,我只走

phpcms图文总结(转)

转自:http://www.cnblogs.com/Braveliu/p/5074930.html 在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1]PHPCMS V9系统目录简析 在研究所有问题之前,请先了解一下系统的文件目录结构,具体如下图所示: [2]想修改默认的模板风格怎么办? PHPCMS V9默认的网页模板在phpcms目录下的templates文件夹.如果想更换模板,可以根据新模板的文件组织结构,分别覆盖default文件夹和st

Linux正确的关机方法

对于Windows用户,如果遇到不爽的时候,往往可以按住电源键几秒钟之后进行强制关机.但是对于Linux,强烈不建议这么做. 因为Windows(非NT主机系统)系统是单用户.“假”多任务的,所以即使你的计算机关机,对于别人也没有什么影响. 而Linux是多用户.多任务的操作系统,每个程序(或者服务)都是在后台执行的.因此,在你看不到的屏幕背后其实可能有很多人同时在你的主机上面工作,例如浏览网页.收发email等,如果你直接按下电源来关机,那其他人的数据可能就此中断,绝对叫人无语凝噎啊.此外,最

能编程与会编程

几个月前因为一个事情被diao了.起因是临近上线的时候项目后端统一了消息协议(.proto),然后要我前端也支持.我研究了一天,没走通,要么依赖项太多,要么一直报错,而且需要使用的对象兼容性有问题.当时心里有些急,也有几份抵触这种方案,于是在会上说出了我的想法:能不能友好的发发json,兼容性好也不需要什么第三方解析.结果自然是被否决了,理由是大厂出品的,怎么可能不能用呢,用屁股想想就知道?你为啥遇到问题就想着退缩呢.我无语凝噎.重要是给我强调了能编程与会编程是不一样的. 开完会情绪有点低落,回

周易卦象

作者:石中火链接:http://www.zhihu.com/question/28239173/answer/40146896来源:知乎著作权归作者所有,转载请联系作者获得授权. 题主,我推!给!你!看! 在推之前还有几句话要说..首先,我是按照周易六十四卦的顺序推的,不可能一次性推完,所以持续更新.其次,由于参考书目的不同和本人才疏学浅,请各路大神高抬贵手,不对的地方可以留言指正,我会改的.但是别喷!如果各路大神对周易的理解在我之上完全可以批评指正或者另开解答来打我的脸,秀优越秀智商的还是绕道

sscanf解析固定形态的字符串

某厂商demo中的解析字符串的一段代码,字符串格式是"2016/10/02 14:55:26~14:55:28" HB_SDVR_TIME bgntime,endtime; bgntime.dwYear = atoi(g_Filename); bgntime.dwMonth = atoi(g_Filename + 5); bgntime.dwDay = atoi(g_Filename + 8); bgntime.dwHour = atoi(g_Filename + 11); bgnti

你就叫我无题吧

"你就叫我无题吧",因为我也不知道给它起个什么名字了,或者对littlehorse无语凝噎了. 现在感觉写程序之前要先配置好多东西,现在感觉都心力交瘁了. 本来是正在做着个人网站呢,但是看了那么多模板,都感觉差了那么一点点. 唉,当时兴致勃勃,雄心壮志的要自己写一个网站.现在感觉好无力的感觉. 又要找工作,又要想着工作的事情.今天打算把网站给搞一下来着的,但是还没开始,首先在linux上的xmapp这个软件都折腾了好久,不是权限不够,就是权限错误.这样看来还是感觉windows简单,但