UVA_10020_Minimal coverage
来源:互联网 发布:郑州学java 编辑:程序博客网 时间:2024/06/15 20:17
#include<iostream>#include<sstream>#include<string>#include<vector>#include<list>#include<set>#include<map>#include<stack>#include<queue>#include<algorithm>#pragma warning(disable:4996)#include<cstdio>#include<cstdlib>using std::cin;using std::cout;using std::endl;using std::stringstream;using std::string;using std::vector;using std::list;using std::pair;using std::set;using std::multiset;using std::map;using std::multimap;using std::stack;using std::queue;using std::priority_queue;vector<int> dfs(vector<int>&line, const vector<pair<int, int>>&segment, int i){vector<int>count;for (; i < segment.size(); i++){vector<int>temp;//如果除去这个段,仍能保证区间上所有数都被覆盖if (std::all_of(line.begin() + segment[i].first, line.begin() + segment[i].second + 1, [](int i) {return i >1; })){//那么区间的段上的都-1for (int j = segment[i].first; j <= segment[i].second; j++){line[j]--;}temp = dfs(line, segment, i + 1);temp.push_back(i);//回溯--恢复现场for (int j = segment[i].first; j <= segment[i].second; j++){line[j]++;}}count = count.size() > temp.size() ? count : temp;}return count;}int main(){//freopen("input.txt", "r", stdin);//freopen("output.txt", "w", stdout);int T;while (cin >> T){while (T--){int n;if (cin >> n){;}else{break;}vector<pair<int, int>>segment;map<pair<int, int>, pair<int, int>>Map;int left, right;while (cin >> left >> right){if (!left&&!right){break;}if (right<0 || left>n){continue;}segment.push_back({ std::max(0,left),std::min(n,right) });Map.insert({ { std::max(0,left),std::min(n,right) },{ left,right } });}std::sort(segment.begin(), segment.end());auto iter = std::unique(segment.begin(), segment.end());segment.resize(iter - segment.begin());vector<int>line(n + 1);for (size_t i = 0; i < segment.size(); i++){for (left = segment[i].first; left <= segment[i].second; left++){line[left]++;}}if (std::any_of(line.begin(), line.end(), [](int i) {return i == 0; })){cout << '0' << endl;if (T){cout << endl;}continue;}auto count = dfs(line, segment, 0);cout << segment.size() - count.size() << endl;vector<bool>hash(segment.size());for (size_t i = 0; i < count.size(); i++){hash[count[i]] = true;}for (size_t i = 0; i < hash.size(); i++){if (!hash[i]){cout << Map[segment[i]].first << ' ' << Map[segment[i]].second << endl;}}if (T){cout << endl;}}}return 0;}
0 0
- UVA_10020_Minimal coverage
- UVA_10020_Minimal coverage
- Coverage
- Groove Coverage
- Code Coverage
- Coverage Program
- code coverage
- Coverage 文件格式
- Test Coverage
- uva10020Minimal Coverage
- Code coverage
- corde coverage
- django coverage
- groove coverage :SHE
- 加载coverage文件代码
- coverage转shapefile代码
- health insurance coverage
- Code Coverage草案
- BJTU 数学
- zoj 3946Highway Project(最短路改)
- 使用MobAPi获得天气数据
- 说说中断上下文的切换
- java.util包---LinkedHashMap
- UVA_10020_Minimal coverage
- Java编程基础--空指针异常
- 趣味素数-平方回文素数-java
- 树的存储结构
- set测试
- NOJ2102 帅神妹纸的生日礼物(双指针)
- Codeforces 665D 模拟
- 练习2-猜数字
- 迭代遍历二叉树