HDU—— 5174 Ferries Wheel

本题开始之前,先讲解一个知识点——unique(),代码中有用到:

unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除。他是c++中的函数,所以头文件要加#include<iostream.h>,具体用法如下:

    int num[100];

   unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

题意:摩天轮有K个座位,分别标号为1,2,3...K−1,k,且A[i−1]<A[i]<A[i+1](1<i<K).Misaki 邀请N个朋友去做摩天轮,每个朋友都进入一个缆车,如果哪个朋友满足:"(他的缆车的值+左边一个缆车的值)%INT_MAX=右边一个缆车的值",那么可以得到Misaki的一个吻,第1个缆车的左边是第K个车,右边是第2个车,第K个车的左边是第k−1个,右边是第1个.

请帮Misaki计算一下她要吻多少次。你可以假设当所有人进入缆车后,没有空缆车,一个车装有多个朋友也是合法的.

解题思路:暴力,记录每个缆车出现的次数,排序去重,枚举缆车的值,判断是否满足那个等式即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
long long array[111];
map<long long,int> p;
const long long mod = 2147483647;


int main()
{
    //freopen("input.txt","r",stdin);
    int N,T = 1;
    while(~scanf("%d",&N))
    {
       memset(array,0,sizeof(array));
        p.clear();
       for(int i = 0; i<N; i++)
       {
           scanf("%I64d",&array[i]);
            p[array[i]]++;
       }
       int cou = 0;
       sort(array,array+N);
       int len = unique(array,array+N) - array;
       for(int i = 0; i<len; i++)
       {
           if(i == 0 && (array[i]+array[len-1])%mod == array[i+1]) cou += p[array[i]];
           else if(i == len-1 && (array[i]+array[i-1])%mod == array[0]) cou +=p[array[i]];
           else if((array[i]+array[i-1])% mod == array[i+1]) cou +=p[array[i]];
       }
       if(len == 1) printf("Case #%d: -1\n",T++);
       else printf("Case #%d: %d\n",T++,cou);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值