AC了30题,纪念一下--【附注】POJ 2351解题报告
这道题目,不用什么道具的话,一定WA,不过我在网上看了,一个程序,用二分法,也可以AC,并且时间也不多。赞~
不过,我没有那个耐心,我感觉用Qsort已经足够快了。
因此,我用了MAP,因为对于MAP很盲,因此,就边学边用,效果不错,还实惠~呵呵。
对于MAP,
定义:
map<key_type,value> 名称;
插入:
map[]=value;
修改:
map[]=newvalue:
map[]+=newvalue;//如果是数值的话
删除:我还没有用过,呵呵,暂且不表!
遍历:
可以声明一个:
map<key_type,value>::iterator iter;
for(iter=名称,begin();iter!=名称.end();iter++)
{依次访问iter:iter->first,iter->second;}
当然,还有许多高级的用法。暂且不谈
Source Code
Problem: 2153 | User: omycle | |
Memory: 1908K | Time: 3641MS | |
Language: C++ | Result: Accepted |
- Source Code
#pragma warning (disable:4786)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int Count=0;
map<string,int> Score;
string p[10000];
void getstring(char *st)
{
int i=0;
while(1)
{
char ch;
ch=getchar();
if(ch=='\n')
break;
st[i]=ch;
i++;
}
}
void Read()
{
int n;
cin>>n;
int i=0;
Count=n;
getchar();
for(i=0;i<n;i++)
{
char ch[31];
memset(ch,0,sizeof(ch));
getstring(ch);
p[i]=ch;
Score[p[i]]=0;//这样对应起来--p[i]与score对应起来
}
int i_exam;
cin>>i_exam;
for(i=0;i<i_exam;i++)
{
int scr=0;//保存liming 的分数
for(int j=0;j<Count;j++)
{
int sc;
cin>>sc;
getchar();
string str="";
char ch[31];
memset(ch,0,sizeof(ch));
getstring(ch);
str=ch;
Score[str]+=sc;
}
int Co=1;
for(int k=0;k<Count;k++)
{
if(Score[p[k]]>Score["Li Ming"])
Co++;
}
cout<<Co<<endl;
}
}
int main()
{
Read();
return 1;
}
for(int j=0;j>sc;
回复删除getchar(); // 请问 这里为什么加 getchar(); 哦! 是要读
入那个空格?
string str="";
char ch[31];
memset(ch,0,sizeof(ch));
getstring(ch);
str=ch;
Score[str]+=sc;
}