链接: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; }