暑假集训第六周contest1

51Nod - 1413 权势二进制

题意:就是讲给出一个数n,让你求最少由多少个像0,1,10,11......这样的二进制数相加构成;样例n=9就是由9个二进制1相加组成,我不懂比赛的时候我为什么没有看懂题目在讲什么;再举个例子吧!n=2333 就有二进制1111,1111,111三个数相加而成;

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
    int n,maxn=0;
    cin>>n;
    while (n>0)
    {
       maxn=max(maxn,n%10);
       n=n/10;
    }
    cout << maxn << endl;
    return 0;
}

 

 

51Nod - 1289  大鱼吃小鱼

分析:用栈来实现,当鱼儿向右游的时候入栈,向左移的时候,将它与栈顶鱼儿的体积进行比较,当栈非空的时候,把当前鱼儿和栈顶鱼儿的体积进行比较,如果大于栈顶鱼儿,则吃掉栈顶鱼儿,如果小于栈顶鱼儿体积,则被栈顶鱼儿吃掉,听上去很容易的吧!!!不幸的是比赛的时候我又把题目理解成更水的意思了!!!!!

代码:

#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<stack>
using namespace std;
int main()
{
    int n;
    cin>>n;
    stack<int>s;
    int a,b;
    int num=n;
    for (int i=1;i<=n;i++)
    {
        cin>>a>>b;
        if (b==1)
            s.push(a);
        else if (b==0)
        {

            while (!s.empty())
           {
                if (a>s.top())
                s.pop(),num--;
                else
              {
                num--;
                break;
              }
           }
        }
    }
    cout << num << endl;
}

 

posted @ 2017-12-02 15:26  你的女孩居居  阅读(120)  评论(0编辑  收藏  举报