博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4790 分别在两区间内各取一个数使模p为m的方案
阅读量:6880 次
发布时间:2019-06-26

本文共 1371 字,大约阅读时间需要 4 分钟。

想到了用容斥简化题目,也想倒如何去算大区间的方案,最后对两个遗留串处理纠结了太久!!

帅bin ac后我看了别人题解,真的只是细节讨论那儿处理的失误TAT

哎自己傻逼又没写出来!

1 #include
2 #include
3 #include
4 using namespace std; 5 #define LL long long 6 LL p,m; 7 LL gcd(LL x,LL y) 8 { 9 if (y==0) return x;10 return gcd(y,x%y);11 }12 LL cal(LL a, LL b)13 {14 if(a < 0 || b < 0) return 0;15 LL k1=a%p,k2=b%p,ret;16 ret =(a/p)*(b/p)*p;17 ret+=(k1+1)*(b/p)+(k2+1)*(a/p);18 if(k1 > m)19 {20 ret+=min(m+1,k2+1);21 LL tmp=(m+p-k1)%p;22 if(tmp<=k2) ret+=k2-tmp+1;23 }24 else25 {26 LL tmp=(m-k1)%p;27 if(k2>=tmp) ret+=min(m-tmp+1,k2-tmp+1);28 }29 return ret;30 }31 int main()32 {33 LL T,t,a,b,c,d,ta,tz,g;34 scanf("%I64d",&T);35 for (t=1;t<=T;t++)36 {37 scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&d,&p,&m);38 printf("Case #%I64d: ",t);39 tz=(b-a+1)*(d-c+1);40 if (a==0&&c==0) ta=cal(b,d);41 else if (a==0) ta=cal(b,d)-cal(b,c-1);42 else if (c==0) ta=cal(b,d)-cal(a-1,d);43 else ta=cal(b,d)-cal(a-1,d)-cal(b,c-1)+cal(a-1,c-1);44 45 g=gcd(tz,ta);46 if (ta==0) printf("0/1\n");47 else printf("%I64d/%I64d\n",ta/g,tz/g);48 }49 }
View Code

转载于:https://www.cnblogs.com/xiao-xin/articles/4080316.html

你可能感兴趣的文章
【python3.5】安装lxml中没有etree模块的问题解决方法
查看>>
pgpool-II的性能缺陷
查看>>
spin_lock浅析【转】
查看>>
MVC前台Post/Get异步获得数据时参数的取值问题
查看>>
8086/8088指令详解
查看>>
iOS:自定义代码块{ }
查看>>
C# 远程链接指定计算机,获取该计算机的计算机名等信息
查看>>
[Flume][Kafka]Flume 与 Kakfa结合例子(Kakfa 作为flume 的sink 输出到 Kafka topic)
查看>>
OpenGL入门笔记(十一)
查看>>
kill命令
查看>>
python3爬虫(二)实战- 爬糗事百科
查看>>
windowsXP用户被禁用导致不能网站登录
查看>>
第 8 章 TokyoCabinet/Tyrant
查看>>
智慧城市逐步推进 未来城市建设突破口分析
查看>>
是谁在推动路由器智能连接功能的普及?
查看>>
物联网软件更新政策不明 智能冰箱也易沦为犯罪工具
查看>>
基于 SaaS 解决库存问题, Nextail 获 160 万美元融资
查看>>
Windows 10新版可以更新了!这些新功能值得升级
查看>>
《微信公众平台开发最佳实践》——2.2 微信开发者中心
查看>>
《IPv6精髓(第2版)》——1.4 常见误解
查看>>