获赞
1132
粉丝
18
关注
4
看过 TA
35
北京大学
2018
前端工程师
IP属地:未知
但愿付出之后能有相应回报吧
私信
关注
有点气人。。前两道那么简单却一直调不出来。。 第一题题目: 题目描述: Tom最近很闲,所以发明了一个小游戏。给出一个数字m(m 521),有三个数字牌,可以用一张牌替换随意一种数字,一张扑克牌只能用一次,现在要求求出替换后的最大值(可以选择不用数字牌)。 输入 有n组数据,先输入n。随后每组数据输入m(m 521)和三个数字牌 输出 替换后的最大数字 样例输入 2 9001 0 1 2 9301 0 1 2 样例输出 9221 9321 我的代码:提示OLE错误:您的程序还在运行,但是输出内容字符数已经超过正确答案的字符数,明显已经是错误的,不必再运行下去了。 一脸懵逼,找到挺久找不到错误。...
圣嘉然之力:我觉得第二题要剪枝,比如k=1,你[1,2,3,3,4]的话i从1开始到3为止,i=2的时候就要可以从4开始,中间的上一次计算过了,只需加一下,没考试,上一下自己的程序,不知道对不对 int main() { int n, k; cin >> n >> k; int v[n]; for(int i=0; i<n; ++i) { cin >> v[i]; } int last = 0; int result = n;//最少有4个 for(int start = 0; start < n - 1; ++start) { int cnt = 1; int record[10];//record[i+1]表示i出现的次数,0-9 memset(record, 0, sizeof(record)); for(int i = start; i <= last; ++i) { if(record[v[i] + 1]==0) record[v[i] + 1] = 1;//初始只出现了一次 else ++record[v[i] + 1]; } result += (last - start); for(int end = last + 1; end < n; ++end) { record[v[end]+1]++; if(record[v[end]+1] > k) {//重复次数超过k last = end - 1;//下一次从last+1开始,因为下一次到last也都可以 break; } else if(end < n - 1) { ++result; } else { if(record[v[end]+1] <= k) ++result; last = end;//到达最后一个了 } } } cout<<result<<endl; }
投递大疆等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务