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;
    }


评论

  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;
    }

    回复删除

发表评论

此博客中的热门博文

提交了30次才AC ---【附】POJ 2488解题报告

n个进程共享m个资源得死锁问题证明