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=-1;c=getchar();}
    while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 55
int n,x,y;
int main()
{
    n=read();
    for (int i=1;i<=n;i++) x+=read();
    for (int i=1;i<=n;i++) y+=read();
    if (x>=y) cout<<"Yes";else cout<<"No";
    return 0;
}

B:用不上位运算的各种性质,开个桶记一下能不能对应上就好。

#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=-1;c=getchar();}
    while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 100010
int n,x,a[N],f[N<<1];
int main()
{
    n=read(),x=read();
    for (int i=1;i<=n;i++) f[a[i]=read()]++;
    for (int i=1;i<=n;i++) if (f[a[i]]>1) {cout<<0;return 0;}
    for (int i=1;i<=n;i++) if (f[x&a[i]]>(a[i]==(x&a[i]))) {cout<<1;return 0;}
    memset(f,0,sizeof(f));
    for (int i=1;i<=n;i++) f[a[i]&x]++;
    for (int i=1;i<=n;i++) if (f[x&a[i]]>1) {cout<<2;return 0;}
    cout<<-1;
    return 0;
}

C:容易发现横坐标或纵坐标选取连续的一段最优。枚举横/纵坐标选取的起始位置就好。

#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=-1;c=getchar();}
    while (c>=‘0‘&&c<=‘9‘) x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 100010
int n,a[N<<1];
int main()
{
    n=read();
    for (int i=1;i<=n*2;i++) a[i]=read();
    sort(a+1,a+n*2+1);
    long long ans=1ll*(a[n]-a[1])*(a[n*2]-a[n+1]);
    for (int i=2;i<=n;i++) ans=min(ans,1ll*(a[n*2]-a[1])*(a[n+i-1]-a[i]));
    cout<<ans;
    return 0;
}

貌似写这三题时达到的最高排名是十几名,有点小膨胀2333

然后看D,完了没啥思路啊。赶紧跳E。

咦这不是随便dp一下就好吗。码码码。

啊好像不太对……咦这样改一下状态不就好了吗。码码码。

啊好像不太对……咦这样改一下状态不就好了吗。码码码。

啊好像不太对……咦这样改一下状态不就好了吗。码码码。

………………

好像突然离结束只有半个小时了。期间从十几名一路掉到接近三百。

终于找到一个比较靠谱的做法了。写起来感觉特别优美啊。

码码码码完了。测样例。咦怎么挂了?

调调调。还是不对啊?

不是这样例怎么回事啊?

哦我看错题了啊。

瞬间翻车。还剩不到二十分钟,脑补一下这个题还是能做的,但根本码不完了啊。

于是就弃疗了。不过看起来还是不会掉rating的。但还是好惨啊。

D:冷静一下会发现,把行列各自看成点之后就是问图里有多少个连通块。

E:后来发现还是想麻烦了,f[i][j]表示前i座山留j座(不考虑第i+1座的影响)花费的最少时间,加一维01状态记一下i留不留,转移时从f[i-1]和f[i-2]转移过来,讨论一下

F:没看

最后rank348。连着几场都在这附近感觉自己也确实就这么弱了啊。

dp题还是得先想好状态和转移,推倒重来太耗时间了。

以及,先看清题意啊。

原文地址:https://www.cnblogs.com/Gloid/p/9392532.html

时间: 2024-10-05 00:19:34

Codeforces Round#500 Div.2 翻车记的相关文章

Codeforces Round#509 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) [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) 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

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 #485 Div. 1 vp记

A:对每种商品多源bfs一下每个点到该商品的最近距离,对每个点sort一下取前s个即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long #define int long long #d