1044. Shopping in Mars (25)
来源:互联网 发布:开淘宝旗舰店流程 编辑:程序博客网 时间:2024/05/11 00:34
1. 原题: https://www.patest.cn/contests/pat-a-practise/1044
2. 思路:
题意:
问题抽象出来就是给定一串数字,找出所有子串数字和=给定值M的序列。
如果没有,就找出比M大但最小的所有子串数字和序列。
思路:
逻辑处理题。有点类似于动态规划。
既然是两种情况,先是一次循环,找出相等的,同时记录大于M的最小值X。
若没有相等的,执行第二次循环,找出等于X的序列首末端。
这里存储首末,我用的map映射,也可以用两个数组。
注意:不要用cin,会超时。
问题抽象出来就是给定一串数字,找出所有子串数字和=给定值M的序列。
如果没有,就找出比M大但最小的所有子串数字和序列。
思路:
逻辑处理题。有点类似于动态规划。
既然是两种情况,先是一次循环,找出相等的,同时记录大于M的最小值X。
若没有相等的,执行第二次循环,找出等于X的序列首末端。
这里存储首末,我用的map映射,也可以用两个数组。
注意:不要用cin,会超时。
3. 源码(已AC):
#include<iostream>#include<map>#include<vector>using namespace std;const int INF = 0x7FFFFFFF;//表示无穷大int main(void){//freopen("in.txt", "r", stdin);int N, M;scanf("%d %d", &N, &M);vector<int> sev(N);for (int i = 0; i < N; i++)scanf("%d", &sev[i]);int mingre = INF;//存储比M大的最小值map<int, int> eqmp, mgmp;//分别存储相等和大于两种情况的序列首末端。for (int i = 0; i < N; i++){int sum = 0;//子串和int sta, end;//首末编号sta = end = i;for (int j = i; j < N; j++){sum += sev[j];end = j;if (sum == M){eqmp[sta] = end;if (j == N - 1)goto output;//这里进行了优化,到了尾端跳出elsebreak;}if (mingre == INF && sum > M)//更新比M大的最小值{mingre = sum;break;}else if (mingre != INF && sum > M){mingre = sum < mingre ? sum : mingre;break;}}}if (eqmp.empty())//第二种情况{for (int i = 0; i < N; i++){int sum = 0;int sta, end;sta = end = i;for (int j = i; j < N; j++){sum += sev[j];end = j;if (sum == mingre){mgmp[sta] = end;if (j == N - 1)goto output;elsebreak;}}}}output: map<int, int>::iterator it;//输出if (!eqmp.empty()){for (it = eqmp.begin(); it != eqmp.end(); it++)printf("%d-%d\n", it->first + 1, it->second + 1);}else{for (it = mgmp.begin(); it != mgmp.end(); it++)printf("%d-%d\n", it->first + 1, it->second + 1);}return 0;}
0 0
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 1044. Shopping in Mars (25)
- 2016拜拜,2017我来
- 了解MECE
- nodejs开发——fs模块
- 初识C#
- 二分图的最大匹配、完美匹配和匈牙利算法见解
- 1044. Shopping in Mars (25)
- make menuconfig 后停着不动,解决办法
- Ubuntu下好用的markdown编辑器
- 异常
- 【POJ 2989】 All Friends【Born_Kerbosch求极大团个数】
- ContentObserver
- 数学建模中常用十大算法
- 2017《JAVA技术》预备作业-计科1502-19-何俏依
- Android学习笔记(十一)--一点感想