zoukankan      html  css  js  c++  java
  • POJ 2081 Recaman's Sequence

    Recaman's Sequence

    Time Limit: 3000ms
    Memory Limit: 60000KB
    This problem will be judged on PKU. Original ID: 2081
    64-bit integer IO format: %lld      Java class name: Main
     
    The Recaman's sequence is defined by a0 = 0 ; for m > 0, am = am−1 − m if the rsulting am is positive and not already in the sequence, otherwise am = am−1 + m. 
    The first few numbers in the Recaman's Sequence is 0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9 ... 
    Given k, your task is to calculate ak.
     

    Input

    The input consists of several test cases. Each line of the input contains an integer k where 0 <= k <= 500000. 
    The last line contains an integer −1, which should not be processed.
     

    Output

    For each k given in the input, print one line containing ak to the output.
     

    Sample Input

    7
    10000
    -1

    Sample Output

    20
    18658

    Source

     
    解题:离线搞。。
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 #include <stack>
     8 #include <set>
     9 #include <map>
    10 #include <queue>
    11 #include <ctime>
    12 #define LL long long
    13 #define INF 0x3f3f3f3f
    14 #define pii pair<int,int>
    15 
    16 using namespace std;
    17 const int maxn = 500010;
    18 int dp[maxn];
    19 bool vis[5000000];
    20 struct node {
    21     int k,ans,o;
    22 };
    23 node inp[1000000];
    24 bool cmp1(const node &x,const node &y) {
    25     return x.k < y.k;
    26 }
    27 bool cmp2(const node &x,const node &y) {
    28     return x.o < y.o;
    29 }
    30 int main() {
    31     int tot = 0,tmp,cnt;
    32     for(int i = 1; i < maxn; ++i) {
    33         dp[i] = dp[i-1]-i;
    34         if(dp[i] <= 0 || vis[dp[i]])
    35             dp[i] = dp[i-1]+i;
    36         vis[dp[i]] = true;
    37     }
    38     while(~scanf("%d",&tmp)&&(~tmp)) {
    39         inp[tot].k = tmp;
    40         inp[tot].o = tot++;
    41     }
    42     sort(inp,inp+tot,cmp1);
    43     for(int i = cnt = 0; i < maxn; ++i)
    44         while(i == inp[cnt].k) inp[cnt++].ans = dp[i];
    45     sort(inp,inp+tot,cmp2);
    46     for(int i = 0; i < tot; ++i)
    47         printf("%d
    ",inp[i].ans);
    48     return 0;
    49 }
    View Code
  • 相关阅读:
    Winform中多线程无法访问使用 Control.CheckForIllegalCrossThreadCalls = false;
    PV操作-生产者/消费者关系
    table表格长度超出屏幕范围,可滑动
    Koa2中间件计算响应总耗时/设置响应头/读取Json文件返回给客户端
    Koa2简介和搭建
    计算机浮点数的表示和运算
    CSS实现Loading加载中动画
    RPC
    Git常用命令
    如何解决 shell 脚本重复执行的问题
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4236433.html
Copyright © 2011-2022 走看看