hihoCoder~~~#1051 : 补提交卡

来源:互联网 发布:移动4g 网络 编辑:程序博客网 时间:2024/05/29 11:42
时间限制:2000ms
单点时限:1000ms
内存限制:256MB

描述

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

输入

第一行是一个整数T(1 <= T <= 10),代表测试数据的组数。

每个测试数据第一行是2个整数N和M(0 <= N, M <= 100)。第二行包含N个整数a1, a2, ... aN(1 <= a1 < a2 < ... < aN <= 100),表示第a1, a2, ...  aN天小Ho没有提交程序。

输出

对于每组数据,输出通过使用补提交卡小Ho的最长连续提交天数最多变成多少。

样例输入
3  5 1  34 77 82 83 84  5 2  10 30 55 56 90  5 10  10 30 55 56 90
样例输出
76  59

100

惭愧啊惭愧,太弱了。AC一道简单的题,

存在问题:1,花了太多时间。2,算法太low。

进步之处:坚持每天一道。

后续改进:明天和同类别人的方法对比,补足方法上的low性。

虽然很水的代码,但是AC了,如下:

// 补提交卡.cpp : Defines the entry point for the console application.//#include <iostream>#include <vector>#include <string>#include <fstream>using namespace std;typedef struct dataGroup{int N, M;vector<int> data;};vector<vector<int>> seedSeeking(vector<int> Ns, int M){vector<vector<int>> seeds;int N = Ns.size();if (N <= M){seeds.push_back(Ns);}if (N > M){vector<int> curSeeds;for (size_t i = 0; i < Ns.size(); i++){if ((i+M) <= N) //确保剩余的元素足够挑选{if (M == 1){curSeeds.push_back(Ns[i]);seeds.push_back(curSeeds);curSeeds.clear();continue;}for (size_t p = i+1; p < Ns.size(); p++){if ((p+M) <= N){curSeeds.push_back(Ns[i]);int curM = 0;while (curM < M - 1){curSeeds.push_back(Ns[p + curM]);curM++;}}seeds.push_back(curSeeds);curSeeds.clear();}}}}return seeds;}int main(){int T, N, M;vector<dataGroup> dataAll;scanf("%d", &T);while (T--){dataGroup curAll;vector<int> data;scanf("%d%d", &N, &M);for (size_t i = 0; i < N; i++){int curData;scanf("%d", &curData);data.push_back(curData);}curAll.N = N;curAll.M = M;curAll.data = data;dataAll.push_back(curAll);}vector<int> label;for (size_t i = 0; i < 100; i++){label.push_back(1);}for (size_t i = 0; i < dataAll.size(); i++){int score = 1;dataGroup curAll = dataAll[i];vector<int> labelCur = label;for (size_t i = 0; i < curAll.data.size(); i++){labelCur.at(curAll.data[i]-1) = 0;}vector<vector<int>> curSeeds = seedSeeking(curAll.data, curAll.M);for (size_t i = 0; i < curSeeds.size(); i++){int scoreCur = 1;vector<int> labelCur1 = labelCur;for (size_t p = 0; p < curSeeds[i].size(); p++){labelCur1.at(curSeeds[i][p] - 1) = 1;}for (size_t q = 0; q < labelCur1.size()-1; q++){if (labelCur1[q] == labelCur1[q+1]){scoreCur++;}else{if (score < scoreCur){score = scoreCur;}scoreCur = 1;}}if (score < scoreCur){score = scoreCur;}}cout << score << endl;}}



0 0
原创粉丝点击