博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018快手实习笔试题
阅读量:7026 次
发布时间:2019-06-28

本文共 5206 字,大约阅读时间需要 17 分钟。

// 第二题O(n)空间#if 0typedef long long ll;int main(){    ll n;    while (cin >> n)    {        if (n < 5)        {            cout << 1 << endl;            continue;        }        vector
dp(n + 1); dp[0] = dp[1] = dp[2] = dp[3] = dp[4] = 1; for (ll i = 5; i <= n; i++) { dp[i] = 2018 * dp[i - 1] % 1000000003 + 2017 * dp[i - 2] % 1000000003 + 2016 * dp[i - 3] % 1000000003 + 2015 * dp[i - 4] % 1000000003 + 2014 * dp[i - 5] % 1000000003; } cout << dp[n] % 1000000003 << endl; } return 0;}#endif// 第二题 时间复杂度超时#if 0typedef long long ll;inline ll ksc(ll x, ll y, ll mod){ return (x*y - (ll)((long double)x / mod*y)*mod + mod) % mod;}int main(){ ll n; while (scanf("%lld",&n)!=EOF) //while (cin >> n) { if (n < 5) { //cout << 1 << endl; printf("1\n"); continue; } vector
dp(6); dp[0] = dp[1] = dp[2] = dp[3] = dp[4] = 1; // 使用6个空间,然后每次都需要移位 for (ll i = 5; i <= n; i++) { dp[5] = 2018 * (dp[4] % 1000000003) + 2017 * (dp[3] % 1000000003) + 2016 * (dp[2] % 1000000003) + 2015 * (dp[1] % 1000000003) + 2014 * (dp[0] % 1000000003); for (int j = 0; j < 5; j++) { dp[j] = dp[j + 1]; } } printf("%lld\n", dp[5] % 1000000003); // 不用移位 //for (ll i = 5; i <= n; i++) //{ // dp[i % 6] = ksc(2018, dp[(i - 1) % 6], 1000000003) + ksc(2017, dp[(i - 2) % 6], 1000000003) + ksc(2016, dp[(i - 3) % 6], 1000000003) + ksc(2015, dp[(i - 4) % 6], 1000000003) + ksc(2014, dp[(i - 5) % 6], 1000000003); // //dp[i % 6] = 2018 * (dp[(i - 1) % 6] % 1000000003) + 2017 * (dp[(i - 2) % 6] % 1000000003) + 2016 * (dp[(i - 3) % 6] % 1000000003) + 2015 * (dp[(i - 4) % 6] % 1000000003) + 2014 * (dp[(i - 5) % 6] % 1000000003); //} ////cout << dp[n%6] % 1000000003 << endl; //printf("%lld\n", dp[n % 6] % 1000000003); } return 0;}#endif// 第二题 时间复杂度超时#if 0typedef long long ll;long long quick_multiply(long long a, long long b, long long mod) { long long result = 0; while (b) { result = (result + (b % 2 * a) % mod) % mod; a = a * 2 % mod; b = b / 2; } return result;}inline ll ksc(ll x, ll y, ll mod){ return (x*y - (ll)((long double)x / mod*y)*mod + mod) % mod;}int main(){ ll n; while (scanf("%lld", &n) != EOF) //while (cin >> n) { if (n < 5) { //cout << 1 << endl; printf("1\n"); continue; } vector
dp(6); dp[0] = dp[1] = dp[2] = dp[3] = dp[4] = 1; for (ll i = 5; i <= n; i++) { dp[i % 6] = quick_multiply(2018, dp[(i - 1) % 6], 1000000003) + quick_multiply(2017, dp[(i - 2) % 6], 1000000003) + quick_multiply(2016, dp[(i - 3) % 6], 1000000003) + quick_multiply(2015, dp[(i - 4) % 6], 1000000003) + quick_multiply(2014, dp[(i - 5) % 6], 1000000003); //dp[i % 6] = 2018 * (dp[(i - 1) % 6] % 1000000003) + 2017 * (dp[(i - 2) % 6] % 1000000003) + 2016 * (dp[(i - 3) % 6] % 1000000003) + 2015 * (dp[(i - 4) % 6] % 1000000003) + 2014 * (dp[(i - 5) % 6] % 1000000003); } //cout << dp[n%6] % 1000000003 << endl; printf("%lld\n", dp[n % 6] % 1000000003); } return 0;}#endif#if 0// 快速幂运算求解斐波拉契数列#include
#include
using namespace std;const int MOD = 10000;struct matrix{ int m[2][2];}ans, base;matrix multi(matrix a, matrix b){ matrix tmp; for(int i = 0; i < 2; ++i) { for(int j = 0; j < 2; ++j) { tmp.m[i][j] = 0; for(int k = 0; k < 2; ++k) tmp.m[i][j] = (tmp.m[i][j] + a.m[i][k] * b.m[k][j]) % MOD; } } return tmp;}int fast_mod(int n) // 求矩阵 base 的 n 次幂 { base.m[0][0] = base.m[0][1] = base.m[1][0] = 1; base.m[1][1] = 0; ans.m[0][0] = ans.m[1][1] = 1; // ans 初始化为单位矩阵 ans.m[0][1] = ans.m[1][0] = 0; while (n) { if (n & 1) //实现 ans *= t; 其中要先把 ans赋值给 tmp,然后用 ans = tmp * t { ans = multi(ans, base); } base = multi(base, base); n >>= 1; } return ans.m[0][1];}int main(){ int n; while (scanf("%d", &n) && n != -1) { printf("%d\n", fast_mod(n)); } return 0;}#endif//计算(x^y) % N; 注:(x^y)表示x的y次方#if 0int main(){ int x, y, N; cin >> x >> y >> N; long res = 1; x = x % N; //开始 while (y > 0) { if (y % 2 == 1) //等价于 if(y&1) res = (res * x) % N; y /= 2; //y>>1; 分解y为二进制编码 x = (x * x) % N; } cout << res << endl; return 0;}#endif
View Code

 

// 第一题#if 0int main(){    int N, M;    cin >> N >> M;    unordered_set
st; for (int i = 0; i < N;i++) { string temp; cin >> temp; st.insert(temp); } for (int i = 0; i < M;i++) { string temp; cin >> temp; if (st.find(temp)!=st.end()) //找到了 { cout << "NO" << endl; } else { st.insert(temp); cout << "YES" << endl; } } return 0;}#endif

 

转载地址:http://maoxl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Oracle查询中rownum与Order by查询的关系(取数据的前几条)
查看>>
一起研究系列:LINUX目录介绍
查看>>
安装libxml2-2.9.1时报错的处理
查看>>
16.Azure站点到站点***隧道(非专线)(下)
查看>>
使用Java反射机制将Map转换为Java对象,支持Boolean、Date类型
查看>>
pnp4nagios在icinga2上安装注意事项
查看>>
Nginx 启动脚本/重启脚本
查看>>
Nginx根据客户端版本号跳转至后台相应服务器
查看>>
《javascript DOM编程艺术》读后
查看>>
Cisco IOS Zoned-Based Policy Firewall
查看>>
STP HSRP LSA TRACK SLA和NAT结合实现网络出口的冗余
查看>>
人不疯狂何以成功
查看>>
linux 进程基础(一)
查看>>
Android手机Root后的安全问题汇总
查看>>
Oracle从零开始18——表的管理08——数据库备份与恢复
查看>>
高性能分布式闪存系统探讨
查看>>
Access 无当前记录 错误的解决方案
查看>>
Kibana+Logstash+Elasticsearch 日志查询系统
查看>>
cvPyrDown cvPyrUp 图像金字塔
查看>>