暑假集训第六周contest1
题意:就是讲给出一个数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;
}