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

https://codeforces.com/contest/1013

A

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 200005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n,ans1,ans2; int main(){
std::ios::sync_with_stdio(false);
cin>>n;
int x;
for(int i=;i<=n;i++){
cin>>x;
ans1+=x;
}
for(int i=;i<=n;i++){
cin>>x;
ans2+=x;
}
if(ans1>=ans2) puts("YES");
else puts("NO");
}

B

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 200005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n,x;
int a[];
int b[];
set<int>se1,se2,se3; int main(){
std::ios::sync_with_stdio(false);
cin>>n>>x;
for(int i=;i<=n;i++){
cin>>a[i];
b[i]=a[i]&x;
se1.insert(a[i]);
se2.insert(b[i]);
}
if(se1.size()!=n){
cout<<<<endl;
return ;
}
for(int i=;i<=n;i++){
se1.erase(a[i]);
se1.insert(b[i]);
if(se1.size()!=n){
cout<<<<endl;
return ;
}
se1.erase(b[i]);
se1.insert(a[i]);
}
if(se2.size()!=n){
cout<<<<endl;
return ;
}
cout<<-<<endl;
}

C

题意:给你2*n个值,组成n个点,问能覆盖这n个点的最小矩形面积

思路:枚举长度为n的区间,这段区间作为x坐标的范围,然后将这段区间的差值与剩下部分的差值相乘取最小值

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 200005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n;
ll a[maxn]; int main(){
std::ios::sync_with_stdio(false);
cin>>n;
n*=;
for(int i=;i<=n;i++) cin>>a[i];
sort(a+,a+n+);
ll ans=(a[n/]-a[])*(a[n]-a[n/+]);
for(int i=;i<=n/+;i++){
ans=min(ans,(a[n]-a[])*(a[i+n/-]-a[i]));
}
cout<<ans<<endl;
}

D

题意:有一个n*m的矩形,一开始有q个格子上被标记。对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第4个也会被标记。求至少需要手动标记几个格子,才能让整个矩形内的格子都被标记。

题意:当(x1,y1),(x1,y2),(x2,y1)被标记时,(x2,y2)也会被标记,所以用并查集维护,判断有多少个点是没有被标记的

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 200005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n,m,q;
int fa[maxn*]; int Find(int x){
int r=x,y;
while(x!=fa[x]){
x=fa[x];
}
while(r!=x){
y=fa[r];
fa[r]=x;
r=y;
}
return x;
} void join(int x,int y){
int xx=Find(x);
int yy=Find(y);
if(xx!=yy){
fa[xx]=yy;
}
} int main(){
std::ios::sync_with_stdio(false);
cin>>n>>m>>q;
int x,y;
for(int i=;i<=n+m;i++) fa[i]=i;
for(int i=;i<=q;i++){
cin>>x>>y;
join(x,y+n);
}
int ans=;
for(int i=;i<=n+m;i++){
if(fa[i]==i){
ans++;
}
}
cout<<ans-<<endl;
}

E

题意:给你n个数,你一次操作可以把某一个数减一,使任意k个数严格大于它旁边的两个数,问最少需要几次操作。输出1<=k<=(n+1)/2时的答案。

思路: dp[i][j][0]表示表示前i个数有j个满足条件,i、i-1都不满足条件的最少操作数

    dp[i][j][1]表示表示前i个数有j个满足条件,i满足条件的最少操作数

    dp[i][j][2]表示表示前i个数有j个满足条件,i-1满足条件的最少操作数

然后进行状态转移:

  dp[i][j][2]=dp[i-1][j][1]+max(0,a[i]-a[i-1]+1);
  dp[i][j][0]=min(dp[i-1][j][0],dp[i-1][j][2]);
  dp[i][j][1]=min(dp[i-1][j-1][0]+max(0,a[i-1]-a[i]+1),dp[i-1][j-1][2]+max(0,min(a[i-1],a[i-2]-1)-a[i]+1));

dp[i][j][1]分为两种情况:

1、前两个都不满足条件,那么i-1就是原来的数,即没有被操作过,需要的操作数就是max(0,a[i-1]-a[i]+1)

2、i-2满足条件,那么i-1已经变成了min(a[i-1],a[i-2]-1),还需要的操作数就是max(0,min(a[i-1],a[i-2]-1)-a[i]+1)

因为转移只用到了dp[i-1][j],dp[i-1][j-1],所以可以用滚动数组优化

参考博客:https://ouuan.blog.luogu.org/solution-cf1012c

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 200005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n;
int dp[][];
int a[]; int main(){
std::ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=;i++){
for(int j=;j<=(n+)/;j++){
dp[j][i]=0x3f3f3f3f;
}
}
dp[][]=dp[][]=;
for(int i=;i<=n;i++){
for(int j=(i+)/;j>=;j--){
dp[j][]=dp[j][]+max(,a[i]-a[i-]+);
dp[j][]=min(dp[j][],dp[j][]);
dp[j][]=min(dp[j-][]+max(,a[i-]-a[i]+),dp[j-][]+max(,min(a[i-],a[i-]-)-a[i]+));
}
}
for(int i=;i<=(n+)/;i++){
cout<<min(dp[i][],min(dp[i][],dp[i][]))<<" ";
}
}

Codeforces Round #500 (Div. 2) [based on EJOI]的更多相关文章

  1. Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals)

    Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) 说一点东西: 昨天晚上$9:05$开始太不好了,我在学校学校$9:40$放 ...

  2. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)

    Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) #include <bits/stdc++ ...

  3. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)

    A. Even Subset Sum Problem 题意 给出一串数,找到其中的一些数使得他们的和为偶数 题解 水题,找到一个偶数或者两个奇数就好了 代码 #include<iostream& ...

  4. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2)

    A - Forgetting Things 题意:给 \(a,b\) 两个数字的开头数字(1~9),求使得等式 \(a=b-1\) 成立的一组 \(a,b\) ,无解输出-1. 题解:很显然只有 \( ...

  5. (AB)Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round

    A. Right-Left Cipher time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

    比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...

  7. Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861C Did you mean...【字符串枚举,暴力】

    C. Did you mean... time limit per test:1 second memory limit per test:256 megabytes input:standard i ...

  8. Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861B Which floor?【枚举,暴力】

    B. Which floor? time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  9. Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861A k-rounding【暴力】

    A. k-rounding time limit per test:1 second memory limit per test:256 megabytes input:standard input ...

随机推荐

  1. [Split The Tree][dfs序+树状数组求区间数的种数]

    Split The Tree 时间限制: 1 Sec  内存限制: 128 MB提交: 46  解决: 11[提交] [状态] [讨论版] [命题人:admin] 题目描述 You are given ...

  2. 备忘:EBS参考链接

    帮助手册查阅网址http://docs.oracle.com/cd/V46499_01/current/html/docset.html  官方 http://www.oracleappshub.co ...

  3. Announcing the Operate Preview Release: Monitoring and Managing Cross-Microservice Workflows

    转自:https://zeebe.io/blog/2019/04/announcing-operate-visibility-and-problem-solving/   Written by Mik ...

  4. Centos6.5安装mariadb的坑坑

    最近在看Ansible,<Ansible权威指南>,然后有个地方是搭建Web应用框架,有个服务器是安装Mariadb,找到官方文档,一直弄,总是报错,换个思路,下载rpm到本地,安装,然后 ...

  5. 时钟分组的用法---Clock Groups

    时钟分组的用法---Clock Groups 哪些时钟互相之间需要分组 同步时钟: 异步时钟: 不确定的时钟: 即使是从同一个MMCMs出来的时钟,有可能为不确定关系的时钟,如果它们之间的相位没有一个 ...

  6. solr6.4.1搜索引擎(4)tomcat重启后数据加载缓慢或丢失

    解决tomcat重启后数据加载缓慢或丢失 我们在首次全量导入和第二次增量导入数据都成功后,在研究solr过程中,会反复重启tomcat. 我们会发现在重启tomcat后,core的data目录下明明已 ...

  7. Metasploit 简单渗透应用

    1.Metasploit端口扫描: 在终端输入msfconsole或直接从应用选metasploit 进入msf>nmap -v -sV 192.168.126.128  与nmap结果一样 用 ...

  8. 通过spark sql 将 hdfs上文件导入到mongodb

    功能:通过spark sql 将hdfs 中文件导入到mongdo 所需jar包有:mongo-spark-connector_2.11-2.1.2.jar.mongo-java-driver-3.8 ...

  9. docker 在windows7 、8下的安装

    这里说明一下这种安装方式适合win7 win8的系统环境下安装的,当然win10也可以,但是win10有更好的方式 即安装Docker Toolbox,同时还附加安装 Docker Client fo ...

  10. 可空类型(Nullable)

    C# 单问号 ? 与 双问号 ?? ? : 单问号用于对 int,double,bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 NullAble 类型的. ...