nysit 251—AMAZING AUCTION
来源:互联网 发布:淘宝小帮手 编辑:程序博客网 时间:2024/06/05 01:41
其实这是一道非常简单的题,用专业术语来说,是用哈希表,直接定位查找。
(1)因为是先找次数最小的,再找价格最小的,就是count的优先级大于price。
定义一个数字,下标存放价格,值存放出现的次数。
然后找出现次数最少的,并且价格是最低的。
在考虑这一点时,我是先这样想的,U代表的是价格上限,for(i=1;i<=U;i++)
{ 找次数等于一次的;没找到,次数加一,直到找到} 相当于用了两层循环,真的很笨 耶!
后来看了别人的代码,非常简单。再增加一个变量few,初始值先给few一个很大的值,用10000吧!然后用few来记录出现的最 少次数。
for(i=1;i<=U;i++)
if(count[i]&&few>count[i])
{
few=count;
price=i;
}
这样就找到了所求价格price!
(2)遇到的第二个问题是,人名我是用string name[],字符串数组来储存的,接受输入的时候,我用的是cin,输出我用printf,会出现乱码。改为cout就成功了!因为在C语言中没有 string类型,所以一般用scanf 和printf对string类型进行处理,都会出错,所以我想碰见string类型时,最好用 cin和 cout。
#include<string.h>
#include<stdio.h>
#include<iostream>
#include<sstream>
using namespace std;
int bid[1002];
int main()
{
int U,M;
string name[102];
int P[102];
while(scanf("%d%d",&U,&M)!=EOF)
{
memset(bid,0,sizeof(bid));
int i;
for(i=0;i<M;i++)
{
cin>>name[i]>>P[i];
bid[P[i]]++;
}
int few=10000;
int price=0; //所求的价格
for(i=1;i<=U;i++)
{
if(bid[i]&&few>bid[i])
{
few=bid[i];
price=i;
}
}
//找是哪个人喊出的
string str="";
for(int j=0;j<M;j++)
{
if(P[j]==price)
{
str=name[j];
break;
}
}
cout<<"The winner is "<<str<<endl<<"The price is "<<price<<endl;
// printf("%d\n",price);
}
return 0;
}
- nysit 251—AMAZING AUCTION
- NYOJ 251 AMAZING AUCTION
- NYOJ 251 AMAZING AUCTION
- AMAZING AUCTION
- AMAZING AUCTION
- 第三届省赛题 AMAZING AUCTION
- NYOJ251 AMAZING AUCTION
- nyoj 251 AMAZING AUCTION 第三届河南省赛
- AMAZING AUCTION(简单模拟)
- 河南省第三届省赛 AMAZING AUCTION
- NYOJ-251-AMAZING AUCTION(第三届河南省程序设计大赛H题(模拟))
- 河南省第三届acm省赛 AMAZING AUCTION
- (精)河南省第三届acm(AMAZING AUCTION)
- Auction
- Auction
- Amazing
- amazing
- Amazing!
- linux关键系统服务详解
- ExtJs树的递归算法(Java),Json格式
- unix常用命令
- 哈夫曼编码 C#
- 关于用PIO读取Excel2003和2007的不同版本处理
- nysit 251—AMAZING AUCTION
- tomca下的web工程打包成war
- linux指令大全
- Android图像开源视图:SmartImageView
- something about IBM DB2
- C++备忘录
- 华为QINQ配置
- 数据库之间的沟通
- 实现android布局的左右拖动及动画效果的代码范例