美团笔试答完了。又要靠单选了难过。[代码已更新]

C++  渣渣一只。
艾玛编程有点简单啊。第二题居然一次过。
一会过了考试时间发代码大神可以交流交流咩。#美团#
全部评论
/*#include <iostream> #include <cmath> #include <string> #include <set> #include <string.h> #include <algorithm> #include <vector> #include <map> #include <stack> #include <queue> #define MAXX (10000) using namespace std; int main() { int n; int getD(int); int dd[11]; dd[0] = 1; for (int i = 1; i <11; i++) { dd[i] = (dd[i - 1] * 10) % 7; } while (cin >> n) { vector<int> v; for (int i = 0; i < n; i++) { int t; cin >> t; v.push_back(t); } int count = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) continue; int temp = 0; temp = temp+(v[i] % 7)*dd[getD(v[j])]; temp %= 7; temp = (temp + v[j]) % 7; if (temp == 0) count += 1; } } cout << count << endl; } } int getD(int n) { if (n <= 9) return 1; int i = 0; while (n != 0) { i += 1; n /= 10; } return i; } ----------------------------------上面是O(n^2)解法-------------------------------------- ----------------------------------下面是O(n)解法----------------------------------------*/ #include <iostream> #include <cmath> #include <string> #include <set> #include <string.h> #include <algorithm> #include <vector> #include <map> #include <stack> #include <queue> #define MAXX (10000) using namespace std; int main() { int n; int getD(int);//这个数几位数 int dd[11]; //dd[i]=(10^i)%7 dd[0] = 1; for (int i = 1; i <11; i++) { dd[i] = (dd[i - 1] * 10) % 7; } int tongyujie[7] = { 0,1,4,5,2,3,6 }; //tongyujie[i]*i=0(mod 7) while (cin >> n) { int s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0;//sn表示除7余n数的个数 vector<int> v; for (int i = 0; i < n; i++) { int t; cin >> t; v.push_back(t); switch (t % 7) { case 0:s0 += 1; break; case 1:s1 += 1; break; case 2:s2 += 1; break; case 3:s3 += 1; break; case 4:s4 += 1; break; case 5:s5 += 1; break; case 6:s6 += 1; break; default:; } } int count = 0; for (int i = 0; i < n; i++) { int yushu = v[i] % 7; int temp = ((7 - yushu)*tongyujie[dd[getD(v[i])]]) % 7; //std::cout <<endl<< yushu << " " << temp << endl; if (yushu == temp) count -= 1;//自身和自身不能同时取到 switch (temp) { case 0:count += s0; break; case 1:count += s1; break; case 2:count += s2; break; case 3:count += s3; break; case 4:count += s4; break; case 5:count += s5; break; case 6:count += s6; break; default:; } } std::cout << count << endl; } } int getD(int n) { if (n <= 9) return 1; int i = 0; while (n != 0) { i += 1; n /= 10; } return i; }
点赞 回复 分享
发布于 2017-09-14 21:38
第二题没啥说的。居然一遍过一脸蒙蔽。 #include <iostream> #include <cmath> #include <string> #include <set> #include <string.h> #include <algorithm> #include <vector> #include <map> #include <stack> #include <queue> #define MAXX (10000) using namespace std; int main() { int n; while (cin >> n) { vector<int> v; for (int i = 0; i < n; i++) { int t; cin >> t; v.push_back(t); } int count = 1; for (int i = 0; i < n - 1; i++) { if (v[i] != v[i + 1]) count += 1; } if (v[0] == 0) count += 1; if (count % 2 == 0) { cout << "Bob" << endl; } else { cout << "Alice" << endl; } } }
点赞 回复 分享
发布于 2017-09-14 21:39
第一题如果直接二重循环的话只能到70%所以一定把时间复杂度降下来。 题的意思说到底就是找两个数a和b满足a*(10^b的数位数加一)+b整体同余7为0的方程。 中间防溢出可以先同余7。 那么根据上面的方程我们可以知道a%7=((0-b%7)*(10^b的数位数加一)的逆)%7。 [关于同余,一次同余式方程解法,逆等的概念请百度或者离散数学。]。 所以只要遍历b就可以了时间到了O(n)。
点赞 回复 分享
发布于 2017-09-14 21:37
没笔,看了下整除7那道题,我的想法是, 用map对每个数a保存,a%7, a*10%7...数据范围a<1e9,所以总共有10个。然后判断,比如127,保存127%7, 1270%7, 12700%7.... 然后遍历数组,对于每个数x,m = x%7,在map里找key为7-m长度为x的长度的value即可,时间复杂度是O(nlogn)
点赞 回复 分享
发布于 2017-09-14 21:24
    更新一个数组a[x][y][z]表示 位数为x的数乘以10的y次方%7 = a[x][y][z];边更新这个数组边做就OK了。                                                                                                                                                                                                              ——来自某位大佬思路   渣渣只有70%
点赞 回复 分享
发布于 2017-09-14 21:18
10%的应该是没有考虑溢出,我考虑溢出以后就70%,妈的就是不能AC
点赞 回复 分享
发布于 2017-09-14 21:16
被7整除,暴力只ac了 70%,,,,
点赞 回复 分享
发布于 2017-09-14 21:06
被7整除如何能不超时呢
点赞 回复 分享
发布于 2017-09-14 21:05
膜拜大佬
点赞 回复 分享
发布于 2017-09-14 20:52
思路分享下啊大牛
点赞 回复 分享
发布于 2017-09-14 20:44
大神说一下思路被
点赞 回复 分享
发布于 2017-09-14 20:44
大神被7整除是什么个思路
点赞 回复 分享
发布于 2017-09-14 20:43
点赞 回复 分享
发布于 2017-09-14 20:42

相关推荐

不愿透露姓名的神秘牛友
昨天 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
舂锋:不能投什么岗都用一份简历,一般都是要看企业的岗位需求来写职业技能或者是项目经历,跟岗位相关的就写多一点。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 11:21
被夸真的超级开心,好可爱的姐姐
码农索隆:老色批们不用脑补了,我把金智妮的图找来了查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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