Codeforces Round #500 (Div. 2) BC

CodeForces 1013B And
CodeForces 1013C  Photo of The Sky

B

可以发现只有一次与操作是有意义的,所以答案只有-1,0,1,2四种情况

 1 #include <bits/stdc++.h>
 2 #define show(a) cout << #a << " = " << a << endl;
 3 const int MOD = 1e9+7;
 4 const int MAXN = 100005;
 5 const int INF = 500005;
 6 typedef long long ll;
 7
 8 using namespace std;
 9
10 int main()
11 {
12     std::ios::sync_with_stdio(false);
13     int n, x, ans = -1;
14     cin >> n >> x;
15     int a[MAXN], point[MAXN];
16     for (int i = 1; i <= n; i++)
17     {
18         cin >> a[i];
19     }
20     sort(a+1, a+1+n);
21     for (int i = 2; i <= n; i++)
22     {
23         if (a[i] == a[i-1])
24         {
25             ans = 0;
26             break;
27         }
28     }
29     if (ans == -1)
30     {
31         int flg = 0;
32         for (int i = 1; i <= n; i++)
33             point[i] = a[i] & x;
34         for (int i = 1; i <= n; i++)
35         {
36             int s = lower_bound(a+1, a+1+n, point[i]) - a;
37             if (point[i] == a[s] && s != i)
38             {
39                 ans = 1, flg = 1;
40                 break;
41             }
42         }
43         if (!flg)
44         {
45             sort(point+1, point+1+n);
46             for (int i = 2; i <= n; i++)
47             {
48                 if (point[i] == point[i-1])
49                 {
50                     ans = 2;
51                     break;
52                 }
53             }
54         }
55     }
56     cout << ans << endl;
57     return 0;
58 }

C

可以看成是红蓝染色,要求(红最大-红最小)*(蓝最大*蓝最小),排序后考虑两端颜色相同或不同,时间复杂度O(n)

 1 #include <bits/stdc++.h>
 2 #define show(a) cout << #a << " = " << a << endl;
 3 typedef long long ll;
 4 const int MOD = 1e9+7;
 5 const int MAXN = 200005;
 6 const ll INF = 1e18;
 7
 8 using namespace std;
 9
10 int main()
11 {
12     std::ios::sync_with_stdio(false);
13     int n;
14     cin >> n;
15     ll num[n*2+5];
16     for (int i = 1; i <= 2*n; i++)
17         cin >> num[i];
18     sort(num+1, num+1+2*n);
19     ll ans = INF;
20     for (int i = 2; i <= n; i++)
21         ans = min(ans, (num[i+n-1] - num[i]) * (num[2*n] - num[1]));
22     ans = min(ans, (num[n*2] - num[n+1]) * (num[n] - num[1]));
23     cout << ans << endl;
24     return 0;
25 }

原文地址:https://www.cnblogs.com/cjc7373/p/9393373.html

时间: 2024-10-20 07:22:47

Codeforces Round #500 (Div. 2) BC的相关文章

Codeforces Round #500 (Div. 2) [based on EJOI]

Codeforces Round #500 (Div. 2) [based on EJOI] https://codeforces.com/contest/1013 A 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define lson l,mid,rt<<1 4 #define rson mid+1,r,rt<<1|1 5 #define IT set<node>::iterator 6 #def

Codeforces Round#500 Div.2 翻车记

A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=

Codeforces Round #500 (Div. 2) ABC

A. Piles With Stones 水题略 B. And 题意:让输入一个n,一个下,之后输入一个长为n的数组a,可以在a中使a变为a&x,问经过几次变化数组中有相同的数 思路:当数组中有两个相同的数时直接输出0,注意a&x后的数无论在与x经过几次按位与运算都不会发生变化, 该题有特殊情况,在数据相当大时可能出现错误,因此要ans=min(ans,1或2),在这最后系统wa了,难受emmmmm 知识点补充:只有1&1=1 代码: #include <bits/stdc+

Codeforces Round #500 (Div.1)

题意: A 给你2n个数字,你可以任意排列 让你排成n个坐标 然后让一个平行于坐标轴的矩形包含这n个坐标 问矩形大小的最小值 n<=1e5 B 给你n*m的方格,已知任意三个点如果这样就可以生成另一个点(见下图) 生成的点可以用来生成别的店,之前的三个点也还在 现在给你q个点,问你至少加几个点能经过若干次生成后让整个矩形上所有格子都有点 n,m<=2e5,q<=min(n*m,2e5) C 给你n个地点,如果某个地点比两边严格高那么就可以建一座房子 你可以花1的代价让某个地点高度-1,可

Codeforces Round #500 (Div. 2) C Photo of The Sky

翻译 给你\(2N\)个数字,你可以任意排列,让你排成\(N\)个坐标,问你包含这\(N\)个坐标的矩形大小的最小值. 思路 明确了求的是最小值!找到一个面积最小长方形使得全部点都包含. 本题的精华可以说是:极差. 然后我们看一下上面的图片,既然都包含,那么满足啥?我们先讨论最大值和最小值包含在 我们就让点一与点二是全部能构成点中的极差最大的点(要是有比他大的你怎么包含)? 然后,我们确定了长,不过宽不必为极差最.那么我下面讲一下为啥. 因为我们只要将输入的数排个序,以\(N\)为界,左边为横坐

Codeforces Round #500 (Div. 2) D Chemical table

翻译 给你一个图,这个图里面会有一些长方形与正方形,只要他们的四角中的任意三个角有一个\(X\)的话(请饶恕我这么形容),那么他就会在空缺的角形成一个新的\(X\),你可以变出来一个\(X\),给你这个图的大小以及哪里有\(X\),问你至少要变出几个\(X\)才可以使得全图都是\(X\). 思路 不亏是明星团队出的题,代码量不大但是思维坑啊.那么我就不绕了,直接入正题(听说有人五分钟切了这道题?) 这道题熟练图论的人可能会想到办法,按照套路,我们可以把有\(X\)的格子他们的行和列看为两个点,然

Codeforces Round #500 (Div. 2) 游记

A Piles With Stones 题意 有\(N\)堆石子,任意个人.每个人可以把一堆石子中的一个石子移动到另一堆,或者是拿走一堆石子.现在给你石子一开始的情况与这些人进行操作后的情况,问是否合法. 思路 此题看上去不简单,但是你可能在几秒内想出一个结论,那就是:无论这些人怎么移动,都没有办法使得石子数量增多!那么做法就简单了,如果石子数量比没改动前的多,那么就不合法了. Code #include<iostream> using namespace std; int sum1=0,su

Codeforces Round #315 (Div. 1)

A. Primes or Palindromes? time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are too complex and un

Codeforces Round #278 (Div. 2) b

/**  *  * @brief Codeforces Round #278 (Div. 2) b  * @file b.c  * @author mianma  * @created 2014/11/24 17:52  * @edited  2014/11/18 17:52  * @type brute  *   * @note   *          declare k >= 0;  *              then   *                  x1 = k  *