Tue, 29 Jan 2019 23:22:42 +0800

master
大蒟蒻 7 years ago
parent 247f24af29
commit 2ec7f660da

@ -1,25 +1,21 @@
# CUGACM2019寒假作业-- 灵活使用STL
###
## A - 水果
### A - 水果
` map<string, map<string, int>>` 模拟即可
###
## B - Hacker, pack your bags!
### B - Hacker, pack your bags!
对于每一天维护这一天之前结束的相同时长的所有旅程中cost最小的不然暴力会TLE。
###
## C - Sockets
### C - Sockets
将电脑连同id一起扔进multimap里然后对socket排序从最小的开始这是个什么神奇道理检查是否有符合的电脑如果没有就`(x+1)/2`直到找到这样的电脑或比当前最小电脑所用量还小其实直接循环个31次应该也能过
###
## D - Bipartite Graph
### D - Bipartite Graph
首先已知这是一个二分图,将其染色并统计两部分数量。将孤立的点选择加到集合一还是二,取最大值即可,时间复杂度与输入复杂度相同。
### E - Pearls in a Row
拿set随便一搞就过了注意Codeforces默认是32位编译的。实在拿不定怎么输出就cout吧

@ -6,3 +6,4 @@ add_executable("A" "A.cpp")
add_executable("B" "B.cpp")
add_executable("C" "C.cpp")
add_executable("D" "D.cpp")
add_executable("E" "E.cpp")

@ -0,0 +1,32 @@
#define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 50;
int a[N];
int main()
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", a + i);
vector<pair<int, int>> ans;
set<int> s;
int last = 0;
for (int i = 1; i <= n; i++)
if (s.empty())
s.insert(a[last = i]);
else if (s.count(a[i]))
ans.push_back(make_pair(last, i)), s.clear();
else
s.insert(a[i]);
if (ans.empty())
puts("-1");
else
{
ans.rbegin()->second = n;
printf("%d\n", ans.size());
for (auto &x : ans)
printf("%d %d\n", x.first, x.second);
}
return 0;
}
Loading…
Cancel
Save