CF Round #524 Div.2 - 竞赛题解

不容易CF有一场下午的比赛,开心的和一个神犇一起报了名

被虐爆……前两题水过去,第三题卡了好久,第四题毫无头绪QwQ

Codeforces 传送门

Tab, 先写了ABC题,后面的之后再补 QwQ


『解析』

A-Petya and Origami

读懂题意就会做……根据题意可以求出3种"sheet"各自需要的数量,然后每一种的数量除以k向上取整后求和就是答案。

B-Margarite and the best present

简单的数学题,根据题意可以将数列分成两部分:

\[-1,-3,-5,-7,... (奇数且负数)\\
2,4,6,8,... (偶数且正数)
\]

hh……两个等差数列。稍微注意一下左右两端点的值然后等差数列求和就可以了

C-Masha and two friends

没看懂官方给的那个算法标签是什么……



(@_@) 不管,反正我觉得我的算法没问题……(其实主要想讲这道题

首先进行的操作是将闭区间变成左开右闭区间和上开下闭区间,这样的效果就是这样:

原来的左下角为\((0,0)\),右上角为\((5,3)\)的矩形是这样:



进行操作过后就长这样:



可以看出来两种矩形覆盖到的方格的个数是一样的……

这步操作主要是为了方便判断重叠。

然后把矩形存成了一个存储了上下左右边界(u,d,l,r)的结构体,然后根据它的左下角坐标和长宽就可以算出它里面的黑白格子分别有多少个。

for example……

比如左下角为\((0,0)\),右上角为\((4,4)\)的矩形,

因为左下角的格子是白色的,所以这个矩形里白色一定不比黑色少(比较简单)

又因为它的长宽是3,3(这里看格子的个数),所以面积为9,较多的格子有5个,另一种格子有4个。

所以白色有5个,黑色有4个。

接下来就套用漂浮法:先在第一层放上黑色的矩形(下面称矩形A)(因为题目中它是最后一个放上去的矩形),然后尝试漂浮白色的矩形(下面称矩形B)——如果与矩形A没有重叠,则全部漂浮上去;否则如果矩形B的左边与矩形A重叠,就把矩形B按矩形A的左边界分为左右两半,etc.

再举个例子:

如果矩形B的右边与矩形A相交,那么分割就会像这样:

OK~切下来的矩形都会“漂浮”上去,对这些矩形统计涂色后各颜色块的变化数量就可以了~

D-Olya and magical square

另外写了一篇博客\(QwQ\)


『源代码』

A-Petya and Origami

/*Lucky_Glass*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
scanf("%d%d",&n,&k);
double A=n*2,B=n*5,C=n*8;
printf("%lld\n",(long long)ceil(A/k)+(long long)ceil(B/k)+(long long)ceil(C/k));
return 0;
}

B-Margarite and the best present

/*Lucky_Glass*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int T;scanf("%d",&T);
while(T--){
long long l,r;
scanf("%lld%lld",&l,&r);
long long fl,fr,gl,gr;
if(l%2) fl=l,gl=l+1;
else gl=l,fl=l+1;
if(r%2) fr=r,gr=r-1;
else gr=r,fr=r-1;
long long ans=0;
if(gl<=gr) ans+=(gl+gr)*((gr-gl)/2+1)/2;
if(fl<=fr) ans-=(fl+fr)*((fr-fl)/2+1)/2;
printf("%lld\n",ans);
}
return 0;
}

C-Masha and two friends

/*Lucky_Glass*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5;
struct SQUARE {
int l,r,u,d,col;
pair<ll,ll> GetArea() {
ll R=u-d,C=r-l,A,B;
if(C%2) {
if(R%2) A=R/2*C+C/2+1,B=R/2*C+C/2;
else A=R/2*C,B=R/2*C;
} else {
if(R%2) A=R/2*C+C/2,B=R/2*C+C/2;
else A=R/2*C,B=R/2*C;
}
if(d%2==l%2) return make_pair(A,B);
else return make_pair(B,A);
}
} squ[N+5];
int n;
ll wht,blk;
void Floatage(int dep,SQUARE now) {
if(now.l>=now.r || now.d>=now.u) return;
while(dep<=n && (now.l>=squ[dep].r || now.r<=squ[dep].l || now.u<=squ[dep].d || now.d>=squ[dep].u))
dep++;
if(dep>n) {
pair<ll,ll> _now=now.GetArea();
if(now.col) wht-=_now.first,blk+=_now.first;
else wht+=_now.second,blk-=_now.second;
return;
}
SQUARE las=squ[dep],nxt;
if(now.l<las.l) {
nxt=now;
nxt.r=las.l;
Floatage(dep+1,nxt);
now.l=las.l;
}
if(now.r>las.r) {
nxt=now;
nxt.l=las.r;
Floatage(dep+1,nxt);
now.r=las.r;
}
if(now.u>las.u) {
nxt=now;
nxt.d=las.u;
Floatage(dep+1,nxt);
now.u=las.u;
}
if(now.d<las.d) {
nxt=now;
nxt.u=las.d;
Floatage(dep+1,nxt);
now.d=las.d;
}
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
SQUARE bak;
bak.l=bak.d=1;
n=2;
scanf("%d%d",&bak.u,&bak.r);
bak.u++;bak.r++;
pair<ll,ll> _bak=bak.GetArea();
wht=_bak.first,blk=_bak.second;
for(int i=0; i<2; i++) //left,down,right,up
scanf("%d%d%d%d",&squ[i].l,&squ[i].d,&squ[i].r,&squ[i].u),squ[i].col=i,
squ[i].r++,squ[i].u++;
for(int i=1; i>=0; i--)
Floatage(i+1,squ[i]);
printf("%lld %lld\n",wht,blk);
}
return 0;
}

\(\mathcal{THE\ END}\)

\(\mathfrak{Thanks\ for\ reading!}\)

有什么没看懂的可以在 \(lucky\_glass@foxmail.com\) 里问(经常看邮箱一族)

竞赛题解 - CF Round #524 Div.2的更多相关文章

  1. Codeforces Round #524 (Div. 2)(前三题题解)

    这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...

  2. CF Round #551 (Div. 2) D

    CF Round #551 (Div. 2) D 链接 https://codeforces.com/contest/1153/problem/D 思路 不考虑赋值和贪心,考虑排名. 设\(dp_i\ ...

  3. CF Round #510 (Div. 2)

    前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...

  4. CF Round #600 (Div 2) 解题报告(A~E)

    CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...

  5. cf Round#273 Div.2

    题目链接,点击一下 Round#273 Div.2 ================== problem A Initial Bet ================== 很简单,打了两三场的cf第一 ...

  6. [题解] Codeforces Round #549 (Div. 2) B. Nirvana

    Codeforces Round #549 (Div. 2) B. Nirvana [题目描述] B. Nirvana time limit per test1 second memory limit ...

  7. 竞赛题解 - [CF 1080D]Olya and magical square

    Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...

  8. 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)

    终于打了一场CF,不知道为什么我会去打00:05的CF比赛…… 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...

  9. 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)

    没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...

随机推荐

  1. qt 拷贝文件设置进度条

    /** * @brief FuncModuleWin::copyFile * @param fromFIleName 优盘里面的文件 * @param toFileName 拷贝到/bin里面的启动文 ...

  2. Windows静态库和动态库的创建和使用

    偶们在实际的编程开发中,经常会遇到运行时无法找到某个DLL文件或者链接时无法找到某个LIB文件.然后,我们就开始乱GOOGLE一下,然后将VS2005的设置改变一下,或许就Ok了,我们将别人开发的DL ...

  3. Timeout occurred while waiting for latch: class 'COLUMNSTORE_ROWGROUP_COLLECTION'

    今天发现线上数据库主从延迟严重: SELECT ag.name AS ag_name, ar.replica_server_name AS ag_replica_server, dr_state.da ...

  4. MySQL案例01:Last_SQL_Errno: 1755 Cannot execute the current event group in the parallel mode

    周五同事监控报警,有个MySQL从库复制状态异常,让我帮忙排查下,经过排查发现是MySQL5.6并行复制的一个Bug所致,具体处理过程如下: 一.错误信息 登录mysql从库服务器,检查复制状态 my ...

  5. Day04——Python模块

    一.模块简介 模块是实现了某个功能的代码集合,比如几个.py文件可以组成代码集合即模块.其中常见的模块有os模块(系统相关),file模块(文件操作相关) 模块主要分三类: 自定义模块 :所谓自定义模 ...

  6. 安装或删除Skype for business server组件的时候,报错"错误: 找不到 SQL 服务"

    安装或删除Skype for business server组件的时候,到了安装所有并置数据库的时候,报错“错误: 找不到 SQL 服务.确保计算机 skype.centos.com 中安装了 SQL ...

  7. 玩转Windows/Linux tftp命令

    tftp很好理解, 主要用来传文件, 下面以我的操作来谈谈tftp中最重要的几个命令. 一. Windows上的sftp命令(据说Linux上也是这样, 当然此处是指非嵌入式的Linux) 步骤: a ...

  8. linux和aix内核参数检查

    安装oracle软件时需要设置操作系统级别的用户限制,后期检查可以使用如下命令,方便问题的排查工作 linux: tail -15 /etc/security/limits.conf tail -30 ...

  9. 大数据平台搭建:Hadoop

    To construct big data distributed platform based on Hadoop is a common method. Hadoop comes fron Goo ...

  10. Json.Net 中Linq to JSON的操作

    Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和 ...