B. A and B and Compilation Errors
Posted -ackerman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. A and B and Compilation Errors相关的知识,希望对你有一定的参考价值。
题目链接:http://codeforces.com/contest/519/problem/B
这道题目有点像求两个集合的差集
一开始就是单纯的去想用短的那个集合去和大的集合去比较,算法也没有想着去优化
结果就超时了
超时代码也贴出来把hhhh
#include <cstdio> #include <cstring> #include <iostream> #include <cstdbool> using namespace std; int main() int n; scanf("%d",&n); int a[n],b[n-1],c[n-2]; for (int i=0;i<n;i++) scanf("%d",&a[i]); for (int i=0;i<n-1;i++) scanf("%d",&b[i]); for (int i=0;i<n-2;i++) scanf("%d",&c[i]); for (int i=0;i<n-1;i++) for (int j=0;j<n;j++) if (b[i] == a[j]) a[j] = 0; break; for (int i=0;i<n;i++) if (a[i] != 0) printf("%d\n",a[i]); for (int i=0;i<n-2;i++) for (int j=0;j<n-1;j++) if (c[i] == b[j]) b[j] = 0; break; for (int i=0;i<n-1;i++) if (b[i] != 0) printf("%d",b[i]); return 0;
非常暴力的解法hh
后来想着去优化,就是先对集合元素排序,然后再进行比较。这样就可以减少算法的复杂度,不会出现n*n的复杂度
如果出现一个不匹配我们直接把它数出来就可以。
如果遍历到底也没出现不匹配的,就说明长集合的最后一个是不匹配的!(这算是一个特例吧,我们就进行一个特判)
AC代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cstdbool> using namespace std; int main() int n; scanf("%d",&n); int a[n],b[n-1],c[n-2]; for (int i=0;i<n;i++) scanf("%d",&a[i]); for (int i=0;i<n-1;i++) scanf("%d",&b[i]); for (int i=0;i<n-2;i++) scanf("%d",&c[i]); sort(a,a+n); sort(b,b+n-1); sort(c,c+n-2); int p = 0; int l = 0; int i; for (i=0;i<n-1;i++) p++; if (a[i] != b[i]) printf("%d\n",a[i]); break; if (p == i) printf("%d\n",a[p]); for (i=0;i<n-2;i++) l++; if (b[i] != c[i]) printf("%d\n",b[i]); break; if (l == i) printf("%d\n",b[l]); return 0;
以上是关于B. A and B and Compilation Errors的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 78 (Rated for Div. 2) B. A and B
B. Mahmoud and a Triangle1000 / 数学
B. Omkar and Last Class of Math1300 / 数论