暑假集训第六周contest1

时间:2024-07-30 09:33:32

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=;
cin>>n;
while (n>)
{
maxn=max(maxn,n%);
n=n/;
}
cout << maxn << endl;
return ;
}

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=;i<=n;i++)
{
cin>>a>>b;
if (b==)
s.push(a);
else if (b==)
{ while (!s.empty())
{
if (a>s.top())
s.pop(),num--;
else
{
num--;
break;
}
}
}
}
cout << num << endl;
}