补提交卡

Badboy学长:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<string>
 6 #include<map>
 7 #include<cstdio>
 8 using namespace std;
 9
10 int main(){
11     int t,m,n,result;
12     int a[105];
13     cin>>t;
14     while(t--){
15         cin>>n>>m;
16         memset(a,0,sizeof(a));
17         int x;
18         for(int i=1;i<=n;i++){
19             cin>>a[i];
20         }
21         a[n+1]=101;
22         if(m>=n) {//如果补提交卡数不小于漏提交天数,就可以将所有漏掉的全部提交;
23             cout<<100<<endl;
24         }
25         else {
26             sort(a+1,a+1+n);//将漏掉的日期从小到大排序;
27             result=a[m+1]-1;//初始最长连续天数设置为补了日期最少的m天;
28             for(int i=m+1;i<=n;i++){
29                 result=max(result,a[i+1]-a[i-m]-1);
30                 //将补提交卡用来弥补连续的m天,每次求最大连续更新即可;
31             }
32             cout<<result<<endl;
33         }
34     }
35
36 return 0;
37 }

Yimi学长:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[105], pre[105];
 4 int main()
 5 {
 6     int T;
 7     cin >> T;
 8     while(T--)
 9     {
10         int n, m;
11         cin >> n >> m;
12         memset(a, 0, sizeof a);
13         for(int i = 0; i < n; i++)
14         {
15             int x;
16             cin >> x;
17             a[x] = 1;
18         }
19         for(int i = 1; i <= 100; i++) pre[i] = pre[i - 1] + a[i];
20         int ans = 0;
21         for(int i = 1; i <= 100; i++)
22         {
23             int p = upper_bound(pre, pre + 101, pre[i - 1] + m) - pre;
24             ans = max(ans, p - i);
25         }
26         cout << ans << endl;
27     }
28     return 0;
29 }

提交地址:http://hihocoder.com/problemset/problem/1051

时间: 2024-10-21 10:42:49

补提交卡的相关文章

hihoCoder 1051 补提交卡 最详细的解题报告

题目来源:补提交卡 解题思路:假设未提交程序的天数为:a1,a2,....,an,补交的张数为M.依次从a1,a2,....,an中去掉连续的 K 天(0<=K<=M),然后再来计算剩余数组中最长连续提交天数. 具体算法(Java版,直接AC) 1 import java.util.Scanner; 2 3 public class Main { 4 5 //计算数组中最长连续提交天数 6 public static int getMax(int[] array) { 7 int[] copy

hihoCoder - 1051 - 补提交卡 (枚举,贪心!!)

#1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了.于是小Ho软磨硬泡.强忍着小Hi鄙视的眼神从小Hi那里要来M张"补提交卡".每张"补提交卡"都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天.小Ho想知道通过利用这M张补提交卡,可以使自己的&

hihoCoder 1051补提交卡(贪心 枚举)

http://hihocoder.com/problemset/problem/1051 既然要选择最长连续提交天数,那么提交卡必须连续使用才有可能得到最优解,这样贪心,然后从头到尾扫一遍求出最大值. 5 1 数组为a[i] 下标从1开始. 34 77 82 83 84 假如 提交卡用在 第一个数那么连续提交天数变成 a[2]-a[0]-1,第二个数 a[3]-a[1]-1,以此类推. 1 #include<cstdio> 2 #include<cstring> 3 int a[1

[HIHO1051]补提交卡(枚举,贪心)

题目链接:http://hihocoder.com/problemset/problem/1051 思路:先排序,然后枚举连续的长度为m的子段,用这个段之后的第一个天数减去这个段之前的第一个天数再-1就是把这个区间全填上后的连续提交天数. 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗

hiho_1051_补提交卡

题目大意 给出1到100这100个数中的某些数字(各个数字不同),这些数字形成一个个间断的连续区间,向1-100中添加M个数字,使得添加后1-100中某连续区间的长度最大,求出添加M个数字后,最长的连续区间的长度. 分析 计算机解决问题嘛,就是搜索解空间,不断的进行尝试(当然在尝试的基础上进行优化,就出现了DFS,BFS,DP,二分,递归,回溯等算法).如果尝试在空缺的位置上添加相应的数字,则指定超时.那么,尝试另一种方式进行搜索:对于区间[beg, end] 可以根据当前的情形得出要使得[be

hihocoder-1051-补提交卡

小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了.于是小Ho软磨硬泡.强忍着小Hi鄙视的眼神从小Hi那里要来M张"补提交卡".每张"补提交卡"都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天.小Ho想知道通过利用这M张补提交卡,可以使自己的"最长连续提交天数"最多变成多少天. (0 <= N, M <= 100

hihocoder 在线测试(Google)

题目1 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去 了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了.于是小Ho软磨硬泡.强忍着小Hi鄙视的眼神从小Hi那里要来M张"补提交卡".每张"补提 交卡"都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天.小Ho想知道通过利用这M张补提交卡,可以使自己的&

学习打卡功能上线,告别懒惰,坚持学习!

为什么打卡? ① 打卡是什么? 每天完成了至少30分钟的学习任务后,你就可以点击打卡,自豪地为自己记录一笔. 通过打卡你可以直观地看到自己累积学习的天数记录,日积月累,满满的打卡记录就是你迈向成功的见证! 所有的打卡记录均可在PC端"我的学习中心-学习打卡"页面查看. ② 如何打卡? 打卡时间为每天0点-24点,登陆学院网站.APP后学习课程满30分钟即可打卡:若超过了 24 点,当天则无法打卡,也无法补打卡,累积学习天数将被清零. (目前只能在PC端打卡,APP中无法操作) ③ 打卡

【干货分享】流程DEMO-补打卡

流程名: 补打卡申请 业务描述: 当员工在该出勤的工作日出勤但漏打卡时,于一周内填写补打卡申请. 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单:  流程: 图片:2.png DEMO包下载: http://files.cnblogs.com/files/1774bpm/%E8%A1%A5%E6%89%93%E5%8D%A1.zip