• hdu 5174 Ferries Wheel


    摩天轮是一个环,周围围绕着一些缆车。每个缆车按顺序编号为1,2,3...K-1,K1,2,3...K1,K而且每个缆车也拥有一个唯一的值且保证A[i-1] < A[i] < A[i+1](1 < i < K)A[i1]<A[i]<A[i+1](1<i<K);
    	
    
    Misaki 邀请NN个朋友去做摩天轮,每个朋友都进入一个缆车,如果哪个朋友满足:"(他的缆车的值+左边一个缆车的值)%INT_MAX=右边一个缆车的值",那么可以得到Misaki的一个吻,第1个缆车的左边是第KK个车,右边是第2个车,第KK个车的左边是第k-1k1个,右边是第1个.
    
    请帮Misaki计算一下她要吻多少次。你可以假设当所有人进入缆车后,没有空缆车,一个车装有多个朋友也是合法的.
    输入描述
    多组测试数据
    每组测试数据第一行一个NN表示有NN个朋友。
    第二行有NN个整数,val[i]val[i]表示第ii个朋友的缆车的值。
    1<=n<=1001<=n<=100;
    0<=val[i]<=0<=val[i]<= INT_MAX
    
    INT_MAX 为 21474836472147483647
    输出描述
    对于每组测试数据,输出Case #x: answer; 如果只有一个缆车,输出-1.
    输入样例
    3
    1 2 3
    5
    1 2 3 5 7
    6
    2 3 1 2 7 5
    
    输出样例
    Case #1: 1
    Case #2: 2
    Case #3: 3
    Hint
    对于第三个样例,当他们进入缆车后,缆车的值是{{1},{2}, {3}, {5}, {7}},但第二个缆车有两个朋友,所以答案是3.
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <map>
    typedef long long LL;
    using namespace std;
    const int Max=111;
    const int MOD=2147483647;
    struct node
    {
       LL value,num;
       node(int xx,int yy):value(xx),num(yy){}
       node(){}
       bool operator < (const node &another) const
       {
           return value<another.value;
       }
    }a[Max];
    map<int,int>book;
    map<int,int>idx;
    int main()
    {
        int n,ca=1,x,y;LL sum;
        while(~scanf("%d",&n))
        {
           book.clear();
           idx.clear();
           int top=0,wei;
           for(int i=0;i<n;i++)
           {
               scanf("%d",&x);
               book[x]++;
               if(book[x]==1)
               {
                 a[top].value=x;
                 a[top].num=1;
                 idx[x]=top;
                 top++;
               }
               else
               {
                 wei=idx[x];
                 a[wei].num=book[x];
               }
           }
           if(top==1) {printf("Case #%d: -1
    ",ca++);continue;}
           sort(a,a+top);
           int ans=0;
           for(int i=0;i<top;i++)
           {
      //         cout<<a[i].value<<" ";
               if(i==0)
               {
                   sum=a[n-1].value+a[0].value;
                   if(sum%MOD==a[1].value) ans+=a[0].num;
               }
               else if(i==n-1)
               {
                   sum=a[n-2].value+a[n-1].value;
                   if(sum%MOD==a[0].value) ans+=a[n-1].num;
               }
               else
               {
                   sum=a[i-1].value+a[i].value;
                   if(sum%MOD==a[i+1].value) ans+=a[i].num;
               }
           }
           printf("Case #%d: %d
    ",ca++,ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    python进阶(18)@wraps装饰器
    python进阶(17)偏函数partial
    《将博客搬至CSDN》
    ajax.error
    js金额校验,js正则表达式,包含正负,小数点后两位
    input框 限制只能输入金额(-.数字)
    input 属性为 number,maxlength不起作用如何解决?
    Redis设计与实现第二部分:第9章:单机数据库的实现
    Redis设计与实现第一部分:第8章:Redis-对象
    Redis设计与实现第一部分:第7章:Redis-压缩列表
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/5384057.html
Copyright © 2020-2023  润新知