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