一個長方體,長寬高分別爲x,y,z,都爲天然數。
如今要把若干個相同的長方體擺成高爲N的一根柱形體。
每層擺1個,若是兩種擺法的高度是同樣的,則認爲這兩種擺法等價,因此每層只有三種擺法。
求一共有多少種擺法。
連接:https://www.nowcoder.com/questionTerminal/7131601fbf5748df8bf4ed564ce9b07a
來源:牛客網
node
第一行爲一個數字N,N>=1且N<=100,表示要擺放的高度
第二行爲長方體的長寬高,x、y、z都爲無符號整數,按升序排列。
擺法總數,已知該總數會小於10000000
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
來源:牛客網
ios
第一行爲數字N,表示接下來有N個數字段(N<=100000)
第二行開始一共有N行,每行兩個數字,分別表示一個數字段的beg和end
(beg和end爲無符號32位整數)
合併去重後造成的數字段集合,按升序排列。
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; }