UVa10025-The ? 1 ? 2 ? ... ? n = k problem

分析:因为数字之间只有加减变换,所以-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);
}
}
}
UVa10025-The ? 1 ? 2 ? ... ? n = k problem的更多相关文章
- UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律
UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...
- UVa 10025: The ? 1 ? 2 ? ... ? n = k problem
这道题仔细思考后就可以得到比较快捷的解法,只要求出满足n*(n+1)/2 >= |k| ,且n*(n+1)/2-k为偶数的n就可以了.注意n==0时需要特殊判断. 我的解题代码如下: #incl ...
- K - problem 问题
Leetcode 有几个题目, 分别是 2sum, 3sum(closest), 4sum 的求和问题和 single Number I II, 这些题目难点在于用最低的时间复杂度找到结果 2-sum ...
- YOURPHP的分页完整版
html代码 <?php print_r($ser['searchtype']);?> <select name="searchtype"> <opt ...
- UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...
- UVA 10025 (13.08.06)
The ? 1 ? 2 ? ... ? n = k problem Theproblem Given the following formula, one can set operators '+ ...
- 剑指OFFER之二叉树中和为某一值的路径(九度OJ1368)
题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 输入: 每个测试案例包括n+1行: 第一行为2 ...
- 剑指OFFER之把数组排成最小的数(九度OJ1504)
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输 ...
- 【原创】UVAOJ水题10025解题报告
首先是原题,转自UVAOJ The ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can s ...
随机推荐
- routing decisions based on paths, network policies, or rule-sets configured by a network administrator
https://en.wikipedia.org/wiki/Border_Gateway_Protocol Border Gateway Protocol (BGP) is a standardize ...
- Decomposing and Redistributing the Statement Method
Refactoring: Improving the Design of Existing Code Decomposing and Redistributing the Statement Meth ...
- Java ArrayListSerialise
import java.io.*; import java.util.*; //ArrayListSerialise public class A { public static void main( ...
- xftp的使用
1.xftp 一个基于 MS windows 平台的功能强大的SFTP.FTP 文件传输软件 2.下载安装 *3.在linux上安装服务 sudo yum install vsftp
- aspx页面Page_Load和aspx页面上控件Page_Load事件执行顺序
今天公司的同事问了我一个问题,就是页面的Load方法和控件上的Load方法执行顺序的问题,看完了这个图片的递归调用之后大家就笑了,吼吼.
- 【Android学习5】Clean 之后R文件丢失
今天一不小心Clean下,发现R文件的资源都不可用,查阅资料发现是自己不小将一个.xml文件的文件名中包含了一个大写字母(为何不能包含大写呢?) 参考解决方法如下: 首先确定你的SDK是新的. 其 ...
- NodeJS模块的使用
在NodeJS中,每个js文件就是一个模块,而文件路径就是模块名, 在编写每个模块时,都有require.exports.module三个预先定义好的变量可供使用. require函数用于在当前模块中 ...
- mongoDB 安装配置
1. 配置文件: 建立配置文件 :mongodb.conf dbpath=D:\mongoDb\data\db #配置数据库目录路径,预先手动创建db目录 logpath=D:\mongoDb\dat ...
- 使用Areas分离ASP.NET MVC项目
为什么需要分离? 我们知道MVC项目各部分职责比较清晰,相比较ASP.NET Webform而言,MVC项目的业务逻辑和页面展现较好地分离开来,这样的做法有许多优点,比如可测试,易扩展等等.但是在实际 ...
- 【C++Q】
//c_str const char* str2Cchar(string s){ //const char* ss = s.c_str(); //出错,因为s会被析构,ss指向垃圾内容 ]; strc ...