• 网易雷火 笔试 4.25


    第一题:n个1*1*1立方体组成的立体结构(立方体可以悬空),求表面积

    思路:假设初始表面积是6*n,看哪些相交减去即可。

    代码:弄丢了

    第二题:求一个连续楼层的能放的最大广告牌面积。

    思路:很经典的单调栈例题

    代码:https://blog.csdn.net/ranwen2/article/details/70943498

    第三题:有多少数满足以下条件。(可以带前缀0)

    1.由n个十进制数组成。

    2.每三位可以被x整除。

    3.每位上的总和为s。

    (3<=n<=50,s<=9*n,0<=x<=999)

    思路:dp[i][j][k]表示在第i位的情况下,以第i位为末尾的连续三位数为j,目前所有位置上数字总和为k。推一下dp,即可,我做了一些优化。

    代码:

     1 #include <iostream>
     2 #include <cmath>
     3 #include <cstring>
     4 #include <stack>
     5 #include <map>
     6 using namespace std;
     7 typedef long long ll;
     8 const ll maxn = 1e5 + 5;
     9 ll dp[51][1005][460];
    10 bool vis[1005];
    11 ll num[1005];
    12 const ll mod=1000009;
    13 int main() {
    14     ll n, sum, last, w, x, s, i, j, t,k, ss,ans = 0, cnt;
    15     while (cin >> n >> s >> x) {
    16         cnt = 1;
    17         map<ll,ll>mp;
    18         memset(vis, false, sizeof(vis));
    19         memset(dp, 0, sizeof(dp));
    20         for (i = 0; i < 1000; i++)
    21             if (i % x == 0)
    22                mp[i]=cnt, num[cnt++] = i, vis[i] = true;
    23         for(i=1;i<cnt;i++)
    24         {
    25              w=num[i]%10;
    26              t=(num[i]/10)%10;
    27              ss=num[i]/100;
    28              sum=ss*100+t*10+w;
    29             dp[3][i][ss+t+w]=1;
    30         }
    31         for(i=3;i<=n-1;i++)
    32         {
    33             for(j=1;j<cnt;j++)
    34             {
    35                 sum=num[j]%100;
    36                 for(t=0;t<10;t++)
    37                 {
    38                     if(vis[sum*10+t])
    39                     {
    40                         w=mp[sum*10+t];
    41                         for(k=0;k<=450;k++)
    42                         {
    43                             dp[i+1][w][k+t]=(dp[i][j][k]+dp[i+1][w][k+t])%mod;
    44 
    45                         }
    46                     }
    47                 }
    48             }
    49         }
    50         sum=0;
    51         for(i=1;i<cnt;i++)
    52             sum=(dp[n][i][s]+sum)%mod;
    53        cout<<sum<<endl;
    54 
    55     }
    56     return 0;
    57 }

     第四题:大模拟太长了,没做

  • 相关阅读:
    数据结构_bubble_sort
    数据结构_sfdg(小F打怪)
    数据结构_yjjsj(伊姐姐数字游戏)
    数据结构 queue
    数据结构 Job
    数据结构 happiness
    数据结构_calculator
    js并归排序的思路
    js神秘的电报密码---哈弗曼编码
    js同时获得数组的两个最小值
  • 原文地址:https://www.cnblogs.com/Carits/p/12773430.html
Copyright © 2020-2023  润新知