当前位置: 首页 > news >正文

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

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\) 里问(经常看邮箱一族)

转载于:https://www.cnblogs.com/LuckyGlass-blog/p/10015247.html

相关文章:

  • MySQL数据“误”删“攻防”战
  • 2018年OpenStack用户调查报告出炉:Kubernetes仍居首
  • Entity相互关系
  • 记一次程序员在办公室里的“撕逼”经历
  • Oracle常用的数值函数,日期函数
  • mac flutter 环境搭建
  • Centos6.6升级Python与安装ipython、pip小结
  • DVWA SQL Injection LOW
  • Apache用户认证;域名跳转;Apache访问日志
  • javascript 前端模版初探
  • 阿里云重磅发布RDS for SQL Server AlwaysOn集群版
  • GlusterFS基本安装
  • Omi入坑指南 First scene 初步认识
  • JPDA 架构研究10 - Agent利用环境指针访问VM(局部变量管理篇)
  • React 2019 年路线图发布!Hooks 明年一季度上线
  • [nginx文档翻译系列] 控制nginx
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • echarts的各种常用效果展示
  • Iterator 和 for...of 循环
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript实现分页效果
  • Meteor的表单提交:Form
  • Unix命令
  • 从PHP迁移至Golang - 基础篇
  • 从零开始学习部署
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 驱动程序原理
  • 十年未变!安全,谁之责?(下)
  • 收藏好这篇,别再只说“数据劫持”了
  • 微信小程序--------语音识别(前端自己也能玩)
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​香农与信息论三大定律
  • #### go map 底层结构 ####
  • #pragma once与条件编译
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $refs 、$nextTic、动态组件、name的使用
  • (02)vite环境变量配置
  • (2)Java 简介
  • (2022 CVPR) Unbiased Teacher v2
  • (4)Elastix图像配准:3D图像
  • (AngularJS)Angular 控制器之间通信初探
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (一)VirtualBox安装增强功能
  • (转)Mysql的优化设置
  • (转载)从 Java 代码到 Java 堆
  • .Family_物联网
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 微服务 服务保护 自动重试 Polly
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .NET中使用Redis (二)
  • [ABC294Ex] K-Coloring
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存