https://www.51nod.com/Challenge/Problem.html#!#problemId=1659

随便弄了一下发现公式,然后从cheatsheet抄一抄平方和公式,发现可以提公因式。

提完发现可以放缩估计出n的上界,复杂度可行。

然后是怎么求m。

一开始弄了个假算法,要求每一步都是整数,其实并不是这样。

经过一顿处理,又怕溢出ll这么麻烦。

最后分两步验证233。

保证结果是整数,那么参加加减法的都是整数,参加乘法的,把系数提到外面,然后保证里面是外面系数的倍数,这样刚好不会溢出。

然后顺手防一波n,m相等bug。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int INF=0x3f3f3f3f; int solve(); int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
solve();
} ll x; vector<pair<ll,ll> >ans; int solve() {
while(~scanf("%lld",&x)) {
ans.clear();
for(ll n=1ll; n<=2000000ll; n++) {
if((6ll*x)%(n*(n+1ll))) {
continue;
} else if(((6ll*x)/(n*(n+1ll))-(2ll*n+1ll))%3ll) {
continue;
} else {
ll m=(6ll*x/(n*(n+1ll))-(2ll*n+1ll))/3ll+n;
if(m>n) {
ans.push_back({n,m});
ans.push_back({m,n});
} else if(m==n) {
ans.push_back({m,m});
} }
}
sort(ans.begin(),ans.end());
int n=(int)ans.size();
printf("%d\n",n);
for(int i=0; i<n; i++) {
printf("%lld %lld\n",ans[i].first,ans[i].second);
}
}
}

最新文章

  1. [Google Guava]字符串处理:连接器、拆分器、字符匹配器
  2. visual studio2010复制粘贴源代码到Word时乱码问题 分类: C# 2014-11-28 09:25 687人阅读 评论(0) 收藏
  3. activemq安装与简单消息发送接收实例
  4. wifi使用的一些误区
  5. 解决 FastReport 使用存储过程 找不到临时表问题
  6. Java数据结构之排序
  7. Android - 和其他APP交互
  8. CSS3制作日历
  9. tomcat 修改网站路径(Java之负基础实战)
  10. JS,JQuery小知识
  11. nmap脚本使用总结
  12. Opennebula常用命令
  13. python old six day
  14. 【JAVA】关于向上转型与向下转型
  15. JVM(四)JVM的双亲委派模型
  16. Linux+Redis实战教程_day02_3、redis数据类型_4、String命令_5、hash命令_6、java操作redis数据库技术
  17. iptables-save和iptables-restore
  18. Scrapy项目之User timeout caused connection failure(异常记录)
  19. C#(同步调用、异步调用、异步回调)
  20. spring boot2 使用log4j2

热门文章

  1. Oracle中Hint深入理解
  2. eclipse的debug使用(转载)
  3. 【BZOJ3505】[Cqoi2014]数三角形 组合数
  4. MongoDB——mongo-connector同步到ES
  5. 美化你的APP——从Toolbar開始
  6. pexpect库学习之包装类详解
  7. java中科学计数法数字转字符串
  8. 《打造Facebook》
  9. listview 没数据内容时显示一个提示文本
  10. Xcode各个版本及模拟器下载