深信服 長方體的擺放

 

連接:https://www.nowcoder.com/questionTerminal/7131601fbf5748df8bf4ed564ce9b07a
來源:牛客網

node

一個長方體,長寬高分別爲x,y,z,都爲天然數。

如今要把若干個相同的長方體擺成高爲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
來源:牛客網

ios

一個數字段由首尾兩個數字標識,表示一個天然數集合,
好比數字段[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;
}
相關文章
相關標籤/搜索