UVa10025-The ? 1 ? 2 ? ... ? n = k problem
2024-08-21 11:54:19
分析:因为数字之间只有加减变换,所以-k和k是一样的,都可以当成整数来考虑,只要找到最小的n满足sum=n*(n+1)/2>=k;且sum和k同奇同偶即可,做法是用二分查找,然后在就近查找
因为1,2,3,4,5,6……的sum变化是奇奇偶偶奇奇偶偶奇奇偶偶……
程序:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static long l,r,mid;
public static long Binary(long k){
l=0;r=100000;
long ans=0;
while(l<=r){
mid=(l+r)/2;
long sum=mid*(mid+1)/2;
if(sum>=k){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
return ans;
}
public static long fun(long k){
if(k==0)
return 3;
long ans=Binary(k);
long sum=ans*(ans+1)/2;
if(k%2!=0){
for(long i=ans;i>=0;i--){
long s=i*(i+1)/2;
if(s<k)break;
if(s%2!=0)
return i;
}
for(long i=ans;;i++){
long s=i*(i+1)/2;
if(s%2!=0)
return i;
}
}
else{
for(long i=ans;i>=0;i--){
long s=i*(i+1)/2;
if(s<k)break;
if(s%2==0)
return i;
}
for(long i=ans;;i++){
long s=i*(i+1)/2;
if(s%2==0)
return i;
}
}
}
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
int n;
n=cin.nextInt();
for(int i=0;i<n;i++){
long k;
k=cin.nextInt();
if(k<0)
k=-k;
long ans=fun(k);
if(i!=0)
System.out.println();
System.out.println(ans);
}
}
}
最新文章
- IplImage, CvMat, Mat 的关系和相互转换(转)
- SWT布局管理器
- JQuery 1.8.3对IE9兼容问题getAttribute
- 1.【转】spring MVC入门示例(hello world demo)
- hdu 5653 Bomber Man wants to bomb an Array
- ARP协议的报文格式
- strcpy/strlen/strcat/strcmp面试总结
- TortoiseHg简单的入门使用说明
- [BZOJ 1034] [ZJOI2008] 泡泡堂BNB 【贪心】
- 通过xib自定义UITableViewCell
- STM32音乐播放器,文件查找的实现
- Django 的路由层 视图层 模板层
- python爬取股票信息
- 解释一下什么是servlet?
- javascript ES6模块化
- EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
- c#多线程实现函数同步运行
- laravel多条件查询,及分页
- Java 数组详解 - 用法、遍历、排序、实用API
- SDUT3141:Count(哈希)好题
热门文章
- Peeking into Apache Flink's Engine Room
- jsonObject jsonarray
- java BufferedWriter and BufferedReader
- [daily][device][bluetooth] 蓝牙怎么办!(archlinux下驱动蓝牙鼠标,以及三星手机)
- Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解 【转】
- 老调重弹:对kvo的封装思路
- 设计模式:组合模式(Composite)
- 学习一下Fiddler的强大
- PMP--论文部分
- Rails进阶参考