小红帽
来源:互联网 发布:淘宝网国际站 编辑:程序博客网 时间:2024/06/07 12:19
Description
有一群喜欢带小红帽的家伙举行了一场别开生面的聚会,然而某些人被邪恶的WM讲帽子上涂了大灰狼的图标,可是每个人看不到自己头上的帽子有没有被涂,他们只能看到其他人头上的帽子是不是大灰狼的图案,现在告诉你每个人看到的别人头上大灰狼帽子的数量,聪明的你啊,能不能判断出来一共有多少个人头上被汪淼涂了可恶的大灰狼呢,当然如果你发现有些人撒谎的话,就直接输出-1吧
Input
包含多组测试数据,每组数组有两行
第一行读入一个n,代表聚会的人数 (n<=100)
第二行一次读入n个数,a[i]代表第i个人看到的其他人头上的大灰狼的个数
第一行读入一个n,代表聚会的人数 (n<=100)
第二行一次读入n个数,a[i]代表第i个人看到的其他人头上的大灰狼的个数
Output
每组数据输出一个数,多少人被涂了大灰狼
Sample Input
3
1 2 1
4
1 1 1 2
1 2 1
4
1 1 1 2
Sample Output
2
-1
-1
算法:
起先看到这个题目时,不知道如何下手,但迅速找一种情况来分析下,比如有5个家伙
若都没有大灰狼图标则:0 0 0 0 0
如果有一个: 0 1 1 1 1
如果有两个:1 1 2 2 2
如果有三个:2 2 2 3 3
如果有四个:3 3 3 3 4
如果有5个:4 4 4 4 4
可以看出上面的规律,若有n个人,其中m个有大灰狼图标的话,其中有结果有m个m-1和n-m个m(如果m为0的话,是n个0)
其他都是细节问题,下面上代码
#include<iostream>#include<vector>using namespace std;#define num 100int main(){int n;while(cin>>n){bool flag=true;int a[100]={0};vector<int>vetmp;for(int i=0;i<n;i++){int input;cin>>input;//如果输入大于人数减一if(input>n-1&&flag==true){flag=false;cout<<-1<<endl;}elsea[input]++;//用于统计多少人数,相当于计数排序}if(flag==false)continue;int sum=0,max=-1,min=-1;for(int i=0;i<num;i++){if(a[i]!=0){sum++;if(min==-1)min=i;else max=i;}}//end for//这种情况是都没狼或者都有狼if(sum==1&&max==-1&&(min==0||min==n-1)){if(min==0)cout<<0<<endl;else cout<<n<<endl;}//有一些人有狼,有一些人没狼else if(sum==2&&a[min]==max&&min==max-1){cout<<min+1<<endl;}else{cout<<-1<<endl;}}//end while}
- 小红帽
- 小红帽
- XDOJ1009--小红帽
- 小红帽安装
- 小红帽的安装
- linux小红帽安装mysql
- 小红帽和两只兔子
- Thinkpad小红帽驱动,Ubuntu10.04
- 小红帽系统软件源的配置
- 小红帽Linux忘记root密码
- 小红帽下载-安装过程备忘录
- 小红帽mkinitrd:command not found解决方法
- (一)2014.8.8 小红帽女仆咖啡厅
- 小红帽免费酒店管理系统PMS
- 在VirtualBox虚拟机下安装linux小红帽
- Ubuntu 9.10 下 thinpad x200小红帽的设置
- 在虚拟机中的小红帽系统上安装VMware tools 方法
- RedHat(小红帽)下 yum用不了的解决办法
- MFC 如何改变对话框的默认背景颜色
- Android内存溢出整理总结
- [算法学习]将一个随机的整数转换成一个按各位上数值大小排序的整数
- ASCII,Unicode和UTF-8
- 暑假学习计划
- 小红帽
- jQueryによるフォームのデザインの基礎(前編)
- 嵌入式linux学习笔记之文件访问
- git 使用详解(8)-- 分支的新建与合并
- 嵌入式处理器分类
- git 使用详解(9)-- 远程分支
- linux 配置oci instant_client及开发环境
- c和指针——目录
- SQL server中SELECT语句的执行顺序