zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    强制设置IE浏览器的版本模式
    设置DIV根据内容自动调整高度的三个方法
    VS2010如何调试IIS上的网站
    DataSet和List<T> 泛型之间互相转换 (转载, 作者写的很好)
    List转DataSet
    数据库中单个表数据备份
    第二阶段冲刺(第二天)
    冲刺第二阶段(第一天)
    学习进度条(第十四周)
    学习进度条(第十三周)
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/5384057.html
Copyright © 2011-2022 走看看