标签:scanf 插入 拆分 出现 数位 ras set clear bool
#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\n"); 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\n"); return 0; } b.erase(it);//如果出现过,那么可以删除了 } if(b.size() == 0 && vis.size()) { c[ans++] = vis.size(); vis.clear(); } } if(b.size()) {//到最后如果没有删完,说明有多余的正数 printf("-1\n"); return 0; } if(ans == 0) {//不用拆分数组 printf("1\n%d\n",n); } else { printf("%d\n",ans); for(int i = 0; i < ans; i++) { printf("%d ",c[i]); } } return 0; }
Codeforces Round #600 (Div. 2) B. Silly Mistake
标签:scanf 插入 拆分 出现 数位 ras set clear bool
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11922040.html