链接:https://www.nowcoder.com/questionTerminal/7131601fbf5748df8bf4ed564ce9b07a
来源:牛客网
一个长方体,长宽高分别为x,y,z,都为自然数。
现在要把若干个相同的长方体摆成高为N的一根柱形体。
每层摆1个,如果两种摆法的高度是一样的,则认为这两种摆法等价,所以每层只有三种摆法。
求一共有多少种摆法。
现在要把若干个相同的长方体摆成高为N的一根柱形体。
每层摆1个,如果两种摆法的高度是一样的,则认为这两种摆法等价,所以每层只有三种摆法。
求一共有多少种摆法。
输入描述:
第一行为一个数字N,N>=1且N<=100,表示要摆放的高度第二行为长方体的长宽高,x、y、z都为无符号整数,按升序排列。
输出描述:
摆法总数,已知该总数会小于10000000
示例1
输入
10 5 6 7
输出
1
备注:
如果没有任何一种摆法可以达成目的,输出0
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<vector>
#include<stack>
using namespace std;
int n,cnt=0;
int a[3];
void dfs(int h)
{
if(h==n)
{
cnt++;
return ;
}
else if(h>n)
return ;
else
{
for(int i=0;i<3;i++)
{
h=h+a[i];
dfs(h);
h=h-a[i];
}
}
}
int main()
{
cin>>n;
cin>>a[0]>>a[1]>>a[2];
dfs(0);
cout<<cnt<<endl;
return 0;
}
链接:https://www.nowcoder.com/questionTerminal/212c0df2ecaf4d73898a0dfa1a56c3fc
来源:牛客网
一个数字段由首尾两个数字标识,表示一个自然数集合,
比如数字段[beg, end)表示从beg到end之间的所有自然数,
包含beg,但不包含end。
有若干个数字段,这些数字段之间可能有重叠,
怎么把这些数字段合并去重,用最少个数的数字段来表示。
合并前后,整个集合包含的数字不发生变化。
比如数字段[beg, end)表示从beg到end之间的所有自然数,
包含beg,但不包含end。
有若干个数字段,这些数字段之间可能有重叠,
怎么把这些数字段合并去重,用最少个数的数字段来表示。
合并前后,整个集合包含的数字不发生变化。
输入描述:
第一行为数字N,表示接下来有N个数字段(N<=100000)第二行开始一共有N行,每行两个数字,分别表示一个数字段的beg和end(beg和end为无符号32位整数)
输出描述:
合并去重后形成的数字段集合,按升序排列。
示例1
输入
4 3 8 3 7 4 6 7 9
输出
3 9
#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<vector>
#include<stack>
using namespace std;
struct node
{
int x;
int y;
}p[100005],pp[1000005];
bool cmp(node a,node b)
{
if(a.x==b.x)
return a.y>b.y;
else
return a.x<b.x;
}
bool cmp1(node a,node b)
{
return a.x<b.x;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>p[i].x>>p[i].y;
sort(p,p+n,cmp);
// cout<<"------sort-----"<<endl;
// for(int i=0;i<n;i++)
// cout<<p[i].x<<' '<<p[i].y<<endl;
int l=p[0].x,r=p[0].y,t=0,flag=0;
for(int i=1;i<n;i++)
{
if(r>=p[i].x&&r>=p[i].y)
continue;
else if(r>=p[i].x&&r<p[i].y)
r=p[i].y;
else if(r<p[i].x)
{
flag=1;
pp[t].x=l;
pp[t].y=r;
l=p[i].x;
r=p[i].y;
t++;
}
}
pp[t].x=l;
pp[t].y=r;
t++;
sort(pp,pp+t,cmp1);
for(int i=0;i<t;i++)
cout<<pp[i].x<<' '<<pp[i].y<<endl;
return 0;
}