PKU Helper 招新面试二
来源:互联网 发布:知乎 大泽佑香 编辑:程序博客网 时间:2024/06/08 12:51
T3
Google Kickstart Round E:完成其中任何一道题目即可。当然,如果你全部完成我们也非常欢迎~
前一篇招新面试一的续集。10.15截止初试,于是ddl压身的可怜的我基本是在最后一天开始动笔QAQ先跳过第二题看的是第三题,看到了之后蛮开心的因为这场Google Kickstart是我玩过的唯一一场,因为完全是想试一试题目所以三个小时期间其实还睡了一个小时hhhhh
当时的战绩【天惹那么水你都好意思晒出来
然而如你们所见,并没有完成任何一道题目QAQ
哇的一声哭了出来QAQ
//Problem A. Copy & Paste#include<iostream>#include<string>#include<queue>using namespace std;struct node{ int now,len; //now表示迄今为止相等的位数 //len表示转化长度 string board; node(int innow=0,int inlen=0,string inboard=""):now(innow),len(inlen),board(inboard){}};bool operator<(const node &a, const node &b){ return a.len>b.len;} int main(){ freopen ("A-large.in", "r", stdin); freopen ("A-large.out", "w", stdout); int T=0; string S; cin>>T; for (int t=1;t<=T;t++) { cin>>S; int slen=S.length(); priority_queue<node> nodelist; node new_node(1,1,""); node top_node; nodelist.push(new_node); while (!nodelist.empty()) { top_node=nodelist.top(); nodelist.pop(); if (top_node.now==slen) break; new_node=top_node; new_node.len++; new_node.now++; nodelist.push(new_node); //在末尾增加一位 new_node=top_node; new_node.len++; int boardlen=new_node.board.length(); if (boardlen>0 && boardlen+new_node.now<=slen) { bool flag=true; for (int i=0;i<boardlen;i++) if (S[i+new_node.now]!=new_node.board[i]) flag=false; if (flag) { new_node.now+=boardlen; nodelist.push(new_node); //把board中的内容粘贴到串中 } } new_node=top_node; new_node.len++; for (int i=0;i<new_node.now;i++) { for (int j=i+1;j<new_node.now;j++) //剪切要有意义,至少board中要有两位 { new_node.board=S.substr(i,j-i+1); // 从第i位开始的长度为j的字符串 nodelist.push(new_node); //改变剪贴板 } } } cout<<"Case #"<<t<<": "<<top_node.len<<endl; } return 0;}
//Problem C. Blackhole#include<iostream>using namespace std;struct node{ double x[3];};int main(){ freopen ("C-small-attempt2.in", "r", stdin); freopen ("C-small-attempt2.out", "w", stdout); int T=0; cin>>T; for (int t=1;t<=T;t++) { node nodelist[3]; double radius=0; double xmin=0,xmax=0; for (int i=0;i<3;i++) { for (int j=0;j<3;j++) { cin>>nodelist[i].x[j]; } } xmin=min(nodelist[0].x[0],nodelist[1].x[0]); xmin=min(xmin,nodelist[2].x[0]); xmax=max(nodelist[0].x[0],nodelist[1].x[0]); xmax=max(xmax,nodelist[2].x[0]); radius=(xmax-xmin)/6; cout<<"Case #"<<t<<": "; printf("%.9lf\n",radius); //<<radius<<endl; } return 0;}
我看了下Board第一页的前30人就没有同时做出A和C的large Case的,倒是B都是全刷过了…我也很无奈啊为何我当时做的不是B呢。最刺激的是C的large就过了三个人正端坐在前三名,于是我决定还是看A吧起码还有戏一点的样子23333
下载了A large的13:46过的那位大神的代码学习一下,发现人家是666啊,应该算是个帅气的动归?
学习一下之后的结果
#include<iostream>#include<string>#define MAXI 100000using namespace std;void solve(){ char s[MAXI]; int mini[305][305][305]; string str; memset(mini,127/3,sizeof(mini)); cin>>(s+1); s[0]='#'; str="@"+string(s+1); int n=strlen(s+1); mini[0][0][0]=0; for (int i=0;i<=n;i++) { int mii=mini[i][0][0]; for (int j=1;j<=i;j++) { for (int r=1;j+r-1<=i;r++) { mii=min(mii,mini[i][j][r]); } } for (int j=1;j<=i;j++) { for (int r=1;j+r-1<=i;r++) { mini[i][j][r]=min(mini[i][j][r],mii+1); } } if (i==n) { printf("%d\n",mii); return; } mini[i+1][0][0]=min(mini[i+1][0][0],mini[i][0][0]+1); for (int j=1;j<=i;j++) { for (int r=1;j+r-1<=i;r++) { mini[i+1][j][r]=min(mini[i+1][j][r],mini[i][j][r]+1); } } for (int i=0;j<=i;j++) { int ml=0; while (s[i+1+ml]==s[j+ml]) ml++; for (int k=0;k<=ml;k++) mini[i+k][j][k]=min(mini[i+k][j][k],mini[i][j][k]+1); } }}int main(){ int T; cin>>T; for (int i=1;i<=T;i++) printf("Case #%d: ",i),sol(); return 0;}
阅读全文
0 0
- PKU Helper 招新面试二
- PKU Helper 招新面试一
- PKU Helper 招新面试三
- 软件工程实验室招新面试
- 新一年校招面试心得
- PKU Helper 2017 开发组招新题目解答
- 招新
- 招新
- 2014腾讯校招面试之二总结
- C/C++校招笔试面试经典题目总结二
- 总结:WHUACM 2007暑假招新笔试(附原题,有许多经典的面试题目)
- 面试技巧101招
- 面试技巧101招
- 校招面试总结
- 校招面试要点
- Tecent校招面试
- 网易校招面试
- 春招面试准备
- dpkg 被中断,您必须手工运行 sudo dpkg –configure -a解决此问题
- Idea中Git的使用和两种类型的冲突解决
- unity3d Unity协程(Coroutine)yield 表达式解释
- 笔试_公司(2)
- (M)DFS:129. Sum Root to Leaf Numbers
- PKU Helper 招新面试二
- 双精度有效位
- python 更换windows壁纸(简单)
- c++ virtual
- Cocos2dx 环境编译出错:jni/Android.mk: Cannot find module with tag 'scripting/lua-bindings'
- Android学习-ListView
- Linux获取当前目录
- C语言几种输入 & 输出
- 射线检测与LayerMask