ZOJ 3704 I am Nexus Master!(模拟)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3704

试了试用类去写题;

方案是用函数递归查找最终的等级;

提示:注意Peasant没法直接升级到User只能满足条件升到Power_User;

AC代码:

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
class oneuser
{
public:
    friend istream & operator <<(istream &, oneuser &);//友元重载<<运算符,用于输入

    //用于初始化rb(上传与下载的比例)和edge(表示对应的等级)
    void setrb()
    {
        rb=up/down;
        if(ed=="Peasant")edge=0;
        else if(ed=="User")edge=1;
        else if(ed=="Power_User")edge=2;
        else if(ed=="Elite_User")edge=3;
        else if(ed=="Crazy_User")edge=4;
        else if(ed=="Insane_User")edge=5;
        else if(ed=="Veteran_User")edge=6;
        else if(ed=="Extreme_User")edge=7;
        else if(ed=="Ultimate_User")edge=8;
        else if(ed=="Nexus_Master")edge=9;
    }

    //递归主体,基于当前等级满足降级条件降级,满足升级条件升级,如果不能升降等级即为答案输出即可
    void setedge()
    {
        if(edge==1)
        {
            if(down>=50&&rb<0.4||down>=100&&rb<0.5||down>=200&&rb<0.6||down>=400&&rb<0.7||down>=800&&rb<0.8)
            {
                edge--;
                setedge();
            }
            else if(week>=4&&down>=50&&rb>=1.05)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"User"<<endl;
            }
        }
        else if(edge==0)
        {
            if(week>=4&&down>=50&&rb>=1.05)
            {
                edge+=2;
                setedge();
            }
            else
            {
                cout<<"Peasant"<<endl;
            }
        }
        else if(edge==2)
        {
            if(rb<0.95)
            {
                edge--;
                setedge();
            }
            else if(week>=8&&down>=120&&rb>=1.55)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"Power_User"<<endl;
            }
        }
        else if(edge==3)
        {
            if(rb<1.45)
            {
                edge--;
                setedge();
            }
            else if(week>=15&&down>=300&&rb>=2.05)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"Elite_User"<<endl;
            }
        }
        else if(edge==4)
        {
            if(rb<1.95)
            {
                edge--;
                setedge();
            }
            else if(week>=25&&down>=500&&rb>=2.55)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"Crazy_User"<<endl;
            }
        }
        else if(edge==5)
        {
            if(rb<2.45)
            {
                edge--;
                setedge();
            }
            else if(week>=40&&down>=750&&rb>=3.05)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"Insane_User"<<endl;
            }
        }
        else if(edge==6)
        {
            if(rb<2.95)
            {
                edge--;
                setedge();
            }
            else if(week>=60&&down>=1024&&rb>=3.55)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"Veteran_User"<<endl;
            }
        }
        else if(edge==7)
        {
            if(rb<3.45)
            {
                edge--;
                setedge();
            }
            else if(week>=80&&down>=1.5*1024&&rb>=4.05)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"Extreme_User"<<endl;
            }
        }
        else if(edge==8)
        {
            if(rb<3.95)
            {
                edge--;
                setedge();
            }
            else if(week>=100&&down>=3*1024&&rb>=4.55)
            {
                edge++;
                setedge();
            }
            else
            {
                cout<<"Ultimate_User"<<endl;
            }
        }
        else if(edge==9)
        {
            if(rb<4.45)
            {
                edge--;
                setedge();
            }
            else
            {
                cout<<"Nexus_Master"<<endl;
            }
        }
    }
     string ed;
     double down,up,rb;
     int week,edge;
};

istream & operator >>(istream & in , oneuser & p)
{
    in>>p.ed>>p.week>>p.down>>p.up;
    return in;
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        oneuser o;
        cin>>o;
        o.setrb();
        o.setedge();
    }
}

 

相关日志

  1. 2016.07.13

    安利一波答案 经典算法设计

      (更多…)

  2. 2016.06.18

    竞赛技巧:读取一行到string类

    string类中定义了getline函数; …

  3. 2016.05.09

    FZU 2091 播放器

    题目地址:http://acm.fzu.ed…

  4. 2016.05.11

    ZOJ 3702 Gibonacci number

    题目地址:http://acm.zju.ed…

  5. 2016.05.09

    FZU 2093 寻找兔子(状压dp)

    题目地址:http://acm.fzu.ed…

  6. 2016.05.12

    ZOJ 3698 Carrot Fantasy(搜索大模拟)

    题目地址:http://acm.zju.ed…

评论

还没有评论。

在此评论中不能使用 HTML 标签。