2018年10月8日 今日头条笔试

动态规划专场,GG。

第一题20%,第二题60%,第三题0%,第四题100%,第五题40%。
#字节跳动#
全部评论
三分钟交卷
点赞 回复 分享
发布于 2018-10-08 23:21
我觉得他不给输入的行数真是烦,自己调的时候太麻烦了
点赞 回复 分享
发布于 2018-10-08 21:04
每次一道题可以纠结好久= = 5个根本来不及思考啊 写输入都花好久
点赞 回复 分享
发布于 2018-10-08 21:31
#include<iostream> #include<math.h> #include<algorithm> #include<string.h> #include<string> #include<stdio.h> #include<fstream> using namespace std; const long long MOD=1000000007; int inv(int a) {     return a==1?1:(long long)(MOD-MOD/a)*inv(MOD%a)%MOD; } long long  C(long long n,long long  m) {     if(m<0)return 0;     if(n<m)return 0;     if(m>n-m)m=n-m;     long long up=1,down=1;     for(long long  i=0;i<m;i++)     {         up=up*(n-i)%MOD;         down=down*(i+1)%MOD;     }     return up*inv(down)%MOD; } int main(){     int a,b,k;     cin>>a>>b>>k;     long long ans =0;     for(int i=0;i<=k;i++){         int sum = i * a + (k-i) *b;         int flag = 0;         while(sum){             if(sum%10 == a || sum %10 == b){                 sum/=10;                 continue;             }             flag=1;             break;         }         if(flag==0){             ans = (ans+C(k,i))%MOD;         }     }     cout<<ans<<endl;     return 0; } 第一题 枚举加快速组合数取模
点赞 回复 分享
发布于 2018-10-08 21:29
只有第三题100% AC了,代码如下:     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         int num = Integer.parseInt(scanner.nextLine());         for(int i=0; i<num; i++) {             String s = scanner.nextLine();             getZeroNumber(s, 0, 0, 0, true);             System.out.println(number);             number = 0;         }     }     private static int number = 0;     private static void getZeroNumber(String s, int start, int now, int sum, boolean minus) {         String subS = s.substring(start, now);         if(subS.length() >= 1) {             long subSum = Long.parseLong(subS);             if (!minus) {                 sum += subSum;             } else {                 sum -= subSum;             }         }                 if (now >= s.length() && start != 0) {             if (sum == 0) {                 number++;                             }             return;         }                 for (int i = now+1; i <= s.length(); i++) {             getZeroNumber(s, now, i, sum, true);             getZeroNumber(s, now, i, sum, false);         }     }
点赞 回复 分享
发布于 2018-10-08 21:10
class Node { public:     int price;     int level;     Node(int m,int n):     price(m),level(n)     {}; }; class Solution { public:     int C(int num,int all)     {         int up = 1;         int down = 1;         if(all - num < num)             num = all - num;         for(int i = 0;i < num;i ++)         {             up = up * (all - i);             down = down * (i + 1);         }         return up / down;     }     int count(int num,int all,int a,int b)     {         int sum = 0;         for(int i = 0;i < num;i ++)             sum += a;         for(int i = 0;i < all - num;i ++)             sum += b;         while(sum)         {             int temp = sum % 10;             if(temp == a || temp == b)                 sum = sum / 10;             else                 return 0;         }         return 1;              }     int luckNumber(int a,int b,int k)     {         int sum = 0;         for(int i = 0;i <= k;i ++)             sum += C(i,k) * count(i,k,a,b);         return sum;     }     void pos(int m, vector<vector<int>> dis)     {         for(int i = 0;i < 4;i ++)             for(int j = 0;j < 4;j ++)             {                 if(dis[i][j] == 1)                 {                     dis[i][j] = 0;                 }                 else if(dis[i][j] == 0)                 {                     dis[i][j] = INT_MAX;                 }             }         for(int i = 0;i < 4;i ++)             for(int j = 0;j < 4;j ++)                 if(dis[i][j] == 0) // side                 {                     dfs(dis,i + 1,j,1);                     dfs(dis,i - 1,j,1);                     dfs(dis,i,j + 1,1);                     dfs(dis,i,j - 1,1);                 }         for(int i = 0;i < 4;i ++)         {             for(int j = 0;j < 4;j ++)             {                 if(dis[i][j] <= m)                     if(j < 3)                         cout<< 0 << ",";                     else                         cout<< 0;                 else                     if(j < 3)                         cout<< 1 << ",";                     else                         cout<< 1;             }             cout<<endl;         }     }     void dfs(vector<vector<int>>& dis,int i,int j,int step)     {         if(i < 0 || i >= dis.size() || j < 0 || j >= dis[0].size())            return;         if(dis[i][j] == -1)             return;         if(dis[i][j] < step)  // has already reached current position             return;         dis[i][j] = step;         dfs(dis, i + 1,j, step + 1);         dfs(dis, i - 1,j , step + 1);         dfs(dis, i, j - 1, step + 1);         dfs(dis, i, j + 1, step + 1);     }     static bool compare(Node node1,Node node2)     {         return node1.price < node2.price;     }     int SumLevel(vector<Node> nodes,int n,int m)     {         vector<vector<vector<int>>> dp(nodes.size() + 1,vector<vector<int>>(m + 1,vector<int>(n + 1,0)));         sort(nodes.begin(),nodes.end(),compare);         for(int i = 0;i < nodes.size();i ++)         {             for(int j = m;j >= nodes[i].price;j --)      // cost             {                 for(int k = n;k >= 1;k --)                 {                     if(j >= nodes[i].price)                         dp[i + 1][j][k] = max(dp[i][j][k],dp[i][j - nodes[i].price][k - 1] + nodes[i].level);                     else                         dp[i + 1][j][k] = dp[i][j][k];                 }             }         }         return dp[nodes.size()][m][n];     }     int getZeroNumber(string s,int sum,int start,int now,bool minus)     {         string subS = s.substr(start, now - start);         int num = atoi(subS.c_str());         int count = 0;         if(now - start >= 1)             if(minus)                 sum -= num;             else                 sum += num;         if(now == s.length())             if(sum == 0)                 return 1;             else                 return 0;         for(int i = now + 1;i <= s.length();i ++)         {             count += getZeroNumber(s, sum, now, i, true);             count += getZeroNumber(s, sum, now, i, false);         }         return count;     }     int countStairs(int m,int a,int b,int n)     {         vector<int> dp(m + 1,0);         int j = 0;         if(m < a || n > b)             return 0;         for(int i = a ;i < b + 1;i ++)             dp[i] = 1;         for(int i = a ;i < m + 1;i ++)             if(i <= n)                 dp[i] = 0;             else                 for(int j = max(0,i - b);j < i - a + 1;j ++)                     dp[i] += dp[j];         return dp[m];     } };
点赞 回复 分享
发布于 2018-10-09 19:40
我a了1.7道收到面试通知了???估计是去送菜的吧
点赞 回复 分享
发布于 2018-10-09 19:18
20 80 100 100 40啥时候能有面试通知呀😂
点赞 回复 分享
发布于 2018-10-09 15:25
第一题 组合问题 第二题 有限制的01背包问题,两维DP 第三题 leetcode494的变形,符号是 +,-和自定义的符号来实现1 # 1-->11,然后backtrack 第四题 找到矩阵的出口,然后从各个出口开始brute force,如果发现距离>k则停止,结合结果最后写出最终矩阵 第五题 有缺陷的楼梯,判断条件如果楼梯总数<a or 连续缺陷的楼梯个数>b,返回0,遇到缺陷的楼梯,dp状态置为0 PS:5道0%的通过率渣渣的YY
点赞 回复 分享
发布于 2018-10-09 11:27
请问谁有这五个题的题目呀?麻烦贴一下啊
点赞 回复 分享
发布于 2018-10-09 09:10
大佬这么厉害。
点赞 回复 分享
发布于 2018-10-08 22:25
100% 80% 100% 0 40%😥
点赞 回复 分享
发布于 2018-10-08 21:46
一道题没做出来
点赞 回复 分享
发布于 2018-10-08 21:26
请问还有后面还有复考的机会吗?
点赞 回复 分享
发布于 2018-10-08 21:22
同怀疑人生
点赞 回复 分享
发布于 2018-10-08 21:17
10,20,0 ,0 ,0,顿时开始怀疑人生
点赞 回复 分享
发布于 2018-10-08 21:17
第一题都没过hh,有大佬指导一下20位数以后咋办吗
点赞 回复 分享
发布于 2018-10-08 21:12
第四题是leetcode Walls and Gates的小变种,但是我不知道如何处理输入的行数和列数
点赞 回复 分享
发布于 2018-10-08 21:09
凉凉
点赞 回复 分享
发布于 2018-10-08 21:09
自己的代码,第五题40%,求a了的大佬指导下。。 m = int(input()) a = int(input()) b = int(input()) n = int(input()) bb = [] for i in range(n):     bb.append(int(input())) num = [] for i in range(m+1):     num.append(0) for i in range(a):     # num.append(0)     num[i] = 0 for i in range(a, b+1):     num[i] = 1 for i in range(a+1, m+1):     if i in bb:         num[i] = 0     else:         for j in range(i-b, i-a+1):                 num[i] += (num[j] % (pow(10, 9)+7)) print(num[m])
点赞 回复 分享
发布于 2018-10-08 21:08

相关推荐

想玩飞盘的菠萝蜜在春...:上交✌🏻也拒?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
19
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务