zoukankan      html  css  js  c++  java
  • 10025

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

    The problem

    Given the following formula, one can set operators '+' or '-' instead of each '?', in order to obtain a given k
    ? 1 ? 2 ? ... ? n = k

    For example: to obtain k = 12 , the expression to be used will be:
    - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 
    with n = 7

    The Input

    The first line is the number of test cases, followed by a blank line.

    Each test case of the input contains integer k (0<=|k|<=1000000000).

    Each test case will be separated by a single line.

    The Output

    For each test case, your program should print the minimal possible n (1<=n) to obtain k with the above formula.

    Print a blank line between the outputs for two consecutive test cases.

    Sample Input

    2
    
    12
    
    -3646397
    

    Sample Output

    7
    
    2701
    

    Alex Gevak
    September 15, 2000 (Revised 4-10-00, Antonio Sanchez)
    /*
     * Author:  
     * Created Time:  2013/10/15 16:03:09
     * File Name: C.cpp
     * solve: C.cpp
     */
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<algorithm>
    #include<string>
    #include<map>
    #include<stack>
    #include<set>
    #include<iostream>
    #include<vector>
    #include<queue>
    //ios_base::sync_with_stdio(false);
    //#pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    #define sz(v) ((int)(v).size())
    #define rep(i, a, b) for (int i = (a); i < (b); ++i)
    #define repf(i, a, b) for (int i = (a); i <= (b); ++i)
    #define repd(i, a, b) for (int i = (a); i >= (b); --i)
    #define clr(x) memset(x,0,sizeof(x))
    #define clrs( x , y ) memset(x,y,sizeof(x))
    #define out(x) printf(#x" %d
    ", x)
    #define sqr(x) ((x) * (x))
    typedef long long LL;
    
    const int INF = 1000000000;
    const double eps = 1e-8;
    const int maxn = 30000;
    
    int sgn(const double &x) {  return (x > eps) - (x < -eps); }
    
    int main() 
    {
        //freopen("in.txt","r",stdin);
        int T;
        cin>>T;
        int f = 0;
        while(T--)
        {
            if(f)
                cout<<endl;
            f = 1;
            LL n;
            cin>>n;
            if(n<0)
                n = -n;
            if(n == 0)
            {
                cout<<3<<endl;
                continue;
            }
            double temp = (sqrt(8*n + 1) - 1)/2.0;
            int ans = ceil(temp);
            
            int sum = (ans + 1)*ans/2;
            int gap = sum - n;
            int ans1;
            if(gap%2 == 0)
            {
                ans1 = ans;
            }else
            {
                for(int i = ans;;++i)
                {
                    int tmp = i*(i+1)/2;
                    gap = tmp - n;
                    if(gap%2 == 0)
                    {
                        ans1 = i;
                        break;
                    }
                }
            }
            
            cout<<ans1<<endl;
            
        }
        return 0;
    }
  • 相关阅读:
    windows下的IO模型之选择(select)模型
    tcp通讯中socket套接字accept和listen的关系
    转一篇shell中关于各种括号的讲解
    记两个std接口equal_range,set_difference
    nginx学习
    c++ 读取文本问题
    vim使用常看
    CNN设计一些问题
    什么是反射?反射机制的应用场景有哪些?
    java为什么只有值传递?
  • 原文地址:https://www.cnblogs.com/DreamHighWithMe/p/3370984.html
Copyright © 2011-2022 走看看