码迷,mamicode.com
首页 > 其他好文 > 详细

热血格斗场

时间:2018-04-22 19:54:40      阅读:559      评论:0      收藏:0      [点我收藏+]

标签:cin   keyword   ams   begin   AC   end   nbsp   --   ber   

热血

1.问题分析

每个人都有对应的实力值和id,而且每个人的实力值不同,用map<int,int>就可以了。键——实力值,值——id,排序后找实力最接近的或id更小的那个。

2.解决方案

①map<int,int>用来存放实力值和对应的id②判断当前实力值是否为最小或最大③找到上(下)一个最接近的实力值,相等时选前一个。

3.算法设计

技术分享图片

4.编程实现

#include<iostream>
#include<map>
using namespace std;
typedef map<int,int>M;
map<int,int>::iterator it,pre,nex;
int main()
{
        int n;
        int id,strength;
        M player;
        player[1000000000]=1;
        cin>>n;
        while(n--)
        {
                cin>>id>>strength;
                player[strength]=id;
                it=player.find(strength);
                if(it==player.begin())
                {
                        nex=it;
                        nex++;
                        cout<<it->second<<" "<<nex->second<<endl;
                }
                else if(it==player.end())
                {
                        pre=it;
                        pre--;
                        cout<<it->second<<" "<<pre->second<<endl;
                }
                else
                {
                        nex=it;
                        nex++;
                        pre=it;
                        pre--;
                        if(nex->first-it->first < it->first-pre->first)
                                cout<<it->second<<" "<<nex->second<<endl;
                        else
                                cout<<it->second<<" "<<pre->second<<endl;
                }
        }
        return 0;
}

5.结果分析

技术分享图片

6.总结体会

看完第四个题之后知道这个题中实力值没有重复的。还是考察对于map这种神奇的容器的应用,用起来还不是很顺手,时间长了应该就比较顺畅了。

冷血

1.问题分析

每个人都有对应的实力值和id,根据题目要求来看,每个人的实力值可能是相同的,所以需要定义map<int,vector<int>>型的map用来存放实力值和对应的id。然后在根据题目要求中的实力最接近和id较小两个要求来写代码。

2.解决方案

①map<int,vector<int>>用来存放实力值和对应的id②判断目前实力值是不是最小或最大③判断在目前的实力值中,是否有其余的id,如果有,选id[0]

3.算法设计

技术分享图片

4.编程实现

#include<iostream>
#include<map>
#include<vector>
using namespace std;
typedef map<int,vector<int>>M;
map<int,vector<int>>::iterator it,pre,nex;
int main()
{
        int n;
        int id,strength;
        vector<int>tem1,tem2,tem3;
        M player;
        player[1000000000].push_back(1);
        cin>>n;
        while(n--)
        {
                cin>>id>>strength;
                player[strength].push_back(id);
                it=player.find(strength);
                tem1=it->second;
                if(it==player.begin())
                {
                        if(tem1.size()==1)
                        {
                                nex=it;
                                nex++;
                                tem2=nex->second;
                                cout<<tem1[0]<<" "<<tem2[0]<<endl;
                        }
                        else
                        {
                                int len=tem1.size()-1;
                                cout<<tem1[len]<<" "<<tem1[0]<<endl;
                        }
                }
                else if(it==player.end())
                {
                        if(tem1.size()==1)
                        {
                                pre=it;
                                pre--;
                                tem2=pre->second;
                                cout<<tem1[0]<<" "<<tem2[0]<<endl;
}
                        else
                        {
                                int len=tem1.size()-1;
                                cout<<tem1[len]<<" "<<tem1[0]<<endl;
                        }
                }
                else
                {
                        if(tem1.size()==1)
                        {
                                pre=it;
                                pre--;
                                tem2=pre->second;
                                nex=it;
                                nex++;
                                tem3=nex->second;
                                if(nex->first-it->first > it->first-pre->first)
                                        cout<<tem1[0]<<" "<<tem2[0]<<endl;
                                else
                                        cout<<tem1[0]<<" "<<tem3[0]<<endl;
                        }
                        else
                        {
                                int len=tem1.size()-1;
                                cout<<tem1[len]<<" "<<tem1[0]<<endl;
                        }
                }
        }
        return 0;
}

5.结果分析

技术分享图片

顺利(嘿嘿~)

6.总结体会

这个题主要考对于map的理解和掌握。map中的键是以红黑树排序的,前不久竟然还以为是一个数组,实在是太傻了。

 


  

 

热血格斗场

标签:cin   keyword   ams   begin   AC   end   nbsp   --   ber   

原文地址:https://www.cnblogs.com/19991201xiao/p/8908742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!