Codeforces Round #600 (Div. 2) B. Silly Mistake
Posted qingyuyyyyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #600 (Div. 2) B. Silly Mistake相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<map> #include<set> #include<algorithm> using namespace std; const int N = 1e7+10; map<int,bool>vis; set<int>b; int n,a[N],c[N]; int main() { scanf("%d",&n); for(int i = 1; i <= n; i++) { scanf("%d",a+i); } int ans = 0; for(int i = 1; i <= n; i++) { if(vis[a[i]]) {//判断是否出现1,1,……-1的情况 printf("-1 "); return 0; } vis[a[i]] = true;//标记出现 if(a[i] > 0) {//只插入正数 b.insert(a[i]); } else {//如果为负数 auto it = b.find(-a[i]);//找他的相反数位置 if(it == b.end()) {//如果没有出现过 printf("-1 "); return 0; } b.erase(it);//如果出现过,那么可以删除了 } if(b.size() == 0 && vis.size()) { c[ans++] = vis.size(); vis.clear(); } } if(b.size()) {//到最后如果没有删完,说明有多余的正数 printf("-1 "); return 0; } if(ans == 0) {//不用拆分数组 printf("1 %d ",n); } else { printf("%d ",ans); for(int i = 0; i < ans; i++) { printf("%d ",c[i]); } } return 0; }
以上是关于Codeforces Round #600 (Div. 2) B. Silly Mistake的主要内容,如果未能解决你的问题,请参考以下文章
第五天打卡 Codeforces Round #600 (Div. 2)
cf比赛记录Codeforces Round #600 (Div. 2)
Codeforces Round #600 (Div. 2)
Codeforces Round #600 (Div. 2) E. Antenna Coverage