博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 599D Spongebob and Squares
阅读量:6432 次
发布时间:2019-06-23

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

很容易得到n × m的方块数是

然后就是个求和的问题了,枚举两者中小的那个n ≤ m。

然后就是转化成a*m + c = x了。a,m≥0,x ≥ c。最坏是n^3 ≤ x,至于中间会不会爆,测下1e18就好。

 

#include
using namespace std;typedef long long ull;vector
ns;vector
ms;//#define LOCALint main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif ull x, t, c, a, n, m; cin>>x; int k = 0; //ns.push_back(1); ms.push_back(x); int equ = 0; for(n = 1; ; n++){ t = n*(n+1)/2; c = (n)*(n+1)*(2*n+1)/6 - n*t; if(c > x) break; a = n*(n+1) - t; if((x - c) % a == 0) { m = (x-c)/a; if(m < n) break; ns.push_back(n); ms.push_back(m); k++; if(m == n){ equ = 1; break; } } } if(equ){ k = 2*k-1; printf("%d\n", k); int sz = ns.size(); for(int i = 0; i < sz; i++){ printf("%I64d %I64d\n", ns[i], ms[i]); } for(int i = sz-2; i >= 0; i--){ printf("%I64d %I64d\n", ms[i], ns[i]); } } else { k = 2*k; printf("%d\n", k); int sz = ns.size(); for(int i = 0; i < sz; i++){ printf("%I64d %I64d\n", ns[i], ms[i]); } for(int i = sz-1; i >= 0; i--){ printf("%I64d %I64d\n", ms[i], ns[i]); } } return 0;}

 

转载于:https://www.cnblogs.com/jerryRey/p/4983261.html

你可能感兴趣的文章
Java中对象并不是都在堆上分配内存的。
查看>>
代码质量与规范,那些年你欠下的技术债
查看>>
计算机程序的思维逻辑 (19) - 接口的本质
查看>>
自定义控件(二) 从源码分析事件分发机制
查看>>
CVE-2014-4113漏洞利用过程分析
查看>>
解密MSSQL链接数据库的密码
查看>>
Glide-源码详解
查看>>
你敢在post和get上刁难我,就别怪我装逼了
查看>>
直播 3.0 时代,在线教育行业的裂变和重构
查看>>
SpringBoot使用Nacos服务发现
查看>>
2017双11技术揭秘—阿里巴巴数据库技术架构演进
查看>>
我的友情链接
查看>>
Spring框架 - AOP使用
查看>>
Ansible常用内置属性
查看>>
C#使用正则表达式校验邮箱
查看>>
Linux自动清理N天前目录文件
查看>>
方便 快捷 安全的EVO邮件服务器
查看>>
bash的快捷键
查看>>
京东金融大数据竞赛猪脸识别(6)- 识别方法之二
查看>>
关于如何编写linux设备驱动
查看>>