期末周之第三把网瘾(真是越来越放肆了...)。这次赛时了一把div 3 , 又一次只做出了A~E,写完E后剩下的题没时间看了(受了些寝室噪音的干扰,最后二十分钟才出)。赛后看了下F和G,感觉也是一时半会儿做不出来的题,遂来补题。

ABCD

这次前四题都很白给。ABC纯模拟题,D是枚举左端点二分右端点的典套路。

不过BC的总共5发罚时确实有点说不过去了,这个和当时寝室比较吵,注意力不集中的关系比较大。以后在寝室打CF时应该提高一下专注力了。

E

用了树状数组 + 离散化过的。感觉这道题挺不错的,需要一点点的思维和代码实现能力。

题意就是给定\(n\)个区间\([a_i,b_i]\) ,然后有一个单价\(w\)。对于某个区间,当\(b_i>=w\)时,这个区间会被选,否则不会选;同时当\(w\)\(<\)\(a_i\)时,这个区间会收到一个差评(在题目中区间是一个商品。这里为了简化题意,就直接这样陈述了)。让你钦定一个\(w\),使得最后获得的总价值最大,并且差评数不超过定值\(k\)。

首先有一个很关键的性质:钦定的单价\(w\)一定是题中给定的某一个\(a_i\)或\(b_i\)。证明很简单:将所有\(a_i\)和\(b_i\)放在一起排个序。反证一下,如果\(w\)不是其中的某个数,则:

  1. 当这个数不超过其中的最大值时,一定可以把他扩大到比它大的且最接近于它的数。这样差评数和购买商品的数量都不会发生变化,合法性仍然保持的同时单价提高了,答案也会变得更优。
  2. 当这个数超过了其中的最大值时,显然没有商品会被购买,总价值为\(0\)。

故可以\(O(n)\)枚举单价\(w\),答案一定在这些情况中的某一个。枚举时计算出当前情况下 购买的商品数 以及 收到的差评数 即可。

我赛时的思路是分别枚举\(a_i\)和\(b_i\),两种枚举分别用不同的方式来判断。

枚举\(b_i\)的判断方式:

将所有区间根据\(b_i\)降序排序,这样在枚举时(设当前枚举到的区间为\([a_i,b_i]\),\(w\)为当前枚举区间的\(b_i\)),所有买的物品一定是当前枚举物品的前缀,不买的物品一定是后缀。维护当前的前缀中所有\(<w\)的\(a_i\)的数量,这相当于带修的查找\(<k\)的所有数的数量,很明显是树状数组可以完成的事情。所以先将所有\(a_i\)离散化,并在枚举的过程中修改并查询即可。

枚举\(a_i\)的判断方式:

和上面的比较类似。将所有区间根据\(a_i\)升序排序,这样在枚举时(设当前枚举到的区间为\([a_i,b_i]\),\(w\)为当前枚举区间的\(a_i\)),后缀的区间都可以被购买且不会收到差评(\(a_i<b_i\));而前缀中,只要被购买的区间就一定会收到差评,但不是所有区间都会被购买。这样,就只需要在枚举\(a_i\)的过程中,维护前缀中所有\(<w\)的\(b_i\)的数量,这些区间都不会被购买。这样,剩下的\(i-1-notbuy\)个区间都会被购买且受到差评。结合后缀信息,总的差评数和购买数就均已知了。

总复杂度\(O(nlogn)\),常数应该比较大,但肯定可以过去。

code

F

模拟 + 分类讨论,赛后看b站讲解后过的。

直接 在脑海中构想 \(or\) 画图,容易发现Joker出现的位置会形成若干段连续的区间。具体来说:

  1. 当移动的牌不是Joker可能出现的位置时,Joker出现的位置一定是中间的一段连续区间。
  2. 第一次移动可能是Joker的牌时,牌的前缀与后缀会出现Joker。
  3. Joker出现的位置最多只会形成前缀,中间,后缀三段区间,证明不再赘述。

所以只需要维护三段区间的左右端点即可。前缀和后缀可以分别用\(above\)和\(below\)单独的指针来维护,中间的区间用\(Lmid\),\(Rmid\)两个指针来维护。模拟所有移动的情况,维护这四个指针的位置即可。注意区间相交时要把区间合并起来。

同时有一个坑点:第一次移动Joker时,若中间区间的长度为1,即只有一个Joker时,中间的区间会消失,即只会形成前缀和后缀两段区间,这个需要专门特判一下。当时自己在想这道题时除了这个坑点,其他的都没问题。还是得再细心一些。。。

code

G

状压\(dp\)。听完题解给的状态定义后,自己把 状态转移 和 预处理转移数组的方法 补出来了,也算是补得比较成功。

\(n <= 20\),毫不犹豫直接状压。

状态定义:\(dp[state][i]\)表示地图中只有二进制数\(state\)表示的全部蛇,并且最后一只蛇的编号为 \(i\) 时,在满足题述移动方式合法性的前提下,最右侧位置最近的格子是第几个。

状态转移:

dp[state|(1<<j)][j + 1] = min(dp[state|(1<<j)][j + 1] , dp[state][i + 1] + g[i + 1][j + 1]);

其中编号为 \(i\) 的蛇在已知序列中的最后一个,编号为 \(j\) 的蛇要加入到当前末尾后面的位置。

\(g[i][j]\)表示当 编号为 \(i\) 的蛇 和 编号为 \(j\) 的蛇 紧邻时,为了保证所有移动操作的合法性,二者需要间隔的最短距离。这个需要根据题目给定的移动序列预处理出来。

预处理\(g[i][j]\)的方法:

首先每只蛇在未经移动操作时至少间隔1个格,故初始化为1。

之后的 \(+\) \(-\) 号处理类似于栈的操作:所有的减号可以抵消掉它后面和它相关的加号。具体解释可能比较麻烦,可以看代码和注释来感性理解一下,还是比较好懂的。

哦对了,最后的答案应当取下式的最小值,而不只是\(dp\)数组的最小值:

dp[(1<<n)-1][i] + move_front[i] , 1 <= i <= n

其中\(movefront[i]\)表示第 \(i\) 条蛇向右移动的距离,即移动操作 \(i +\) 出现的次数。

code

CF div3 995 (A~G)的更多相关文章

  1. js如何使用正则表达式实现过滤HTML标签?(/<[^<>]+>/g)

    js如何使用正则表达式实现过滤HTML标签?(/<[^<>]+>/g) 一.总结 js进阶正则表达式实现过滤HTML标签(<>标签中不能包含标签实现过滤HTML标签 ...

  2. 12.27 cf div3 解题报告

    12.27 cf div3 解题报告 wxy.wxy,带上分拉,全场做了个无脑小白 比赛场地 A: T1,跟着模拟就好了 B: sort一遍之后 去除的数一定是a[1]或者a[n] 比较去除谁小就输出 ...

  3. js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)

    js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g) 一.总结 方括号:范围 圆括号:选 大括号:数量 1.js正则是在双正斜杠之中: var reg2=/[a-z]/ ...

  4. js进阶正则表达式9量词2(^和&作用:/^HTML5$/g匹配不到aHTML5b中的HTML5,不然是可以匹配到的)(/\d+(?=cm)/g)((?!cm))

    js进阶正则表达式9量词2(^和&作用:/^HTML5$/g匹配不到aHTML5b中的HTML5,不然是可以匹配到的)(/\d+(?=cm)/g)((?!cm)) 一.总结 ^和&作用 ...

  5. js进阶正则表达式7点数字字母空格(w d s)(小写表原意,大写表反义)(特殊字符要加反斜杠:var reg22=/\W/g)

    js进阶正则表达式7点数字字母空格(w d s)(小写表原意,大写表反义)(特殊字符要加反斜杠:var reg22=/\W/g) 一.总结 1.w d s,word digital space 2.特 ...

  6. CF(协同过滤算法)

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  7. CF 363B One Bomb(枚举)

    题目链接: 传送门 One Bomb time limit per test:1 second     memory limit per test:256 megabytes Description ...

  8. C++之路进阶——codevs2933(诗人小G)

    2933 诗人小G 2009年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 小G是一个出色的诗人 ...

  9. 在Windows/Ubuntu下安装OpenGL环境(GLUT/freeglut)与跨平台编译(mingw/g++)

    GLUT/freeglut 是什么? OpenGL 和它们有什么关系? OpenGL只是一个标准,它的实现一般自带在操作系统里,只要确保显卡驱动足够新就可以使用.如果需要在程序里直接使用OpenGL, ...

  10. Asp.Net Mvc: 浅析TempData机制(转发 作者: Tristan G )

    Asp.Net Mvc: 浅析TempData机制 环境: Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0 --------------------------- ...

随机推荐

  1. 重温c语言之,7天开整,就是随便的写写,第三天+第四天版

    一:指针 1.关于指针的含义---粗略 例如:int a=10; int* p=&a; 这里的*,是说明p是指针变量,int 说明p是指向的对象是int类型的 *p=20, 这里的*是解引用符 ...

  2. chrome标签同步神器插件-集装箱!

    前言 最近无法忍受360极速浏览器铺天盖地的广告.也无法忍受火狐浏览器的耗内存打开慢的情况.最终又把浏览器换回了Chrome.总所周知Chrome在国内使用的最大问题是同步书签.扩展等功能受到网络环境 ...

  3. ARC151D Binary Representations and Queries

    ARC151D Binary Representations and Queries 题目链接:ARC151D Binary Representations and Queries 非常好思维题. 思 ...

  4. 通过Java代码发送OutLook邮件

    准备 我们想通过Java代码实现发送OutLook邮件,必须准备以下材料: OutLook邮箱 目标邮箱 查看OutLook邮箱信息 打开OutLook邮箱,在Settings中搜索或找到SMTP: ...

  5. Selenium IDE使用指南一(爬虫脚本录制器)

    安装 从Chrome或Firefox网络商店安装Selenium IDE . 启动IDE 安装后,通过从浏览器菜单栏中单击其图标来启动它. 故障排除 在菜单栏中没有看到Selenium IDE的图标? ...

  6. Windows远程登录到VirtualBox安装的Ubuntu11.10

    一.环境 本地:Windows xp 虚拟机:VirtualBox 虚拟机的操作系统:Linux-Ubuntu11.10 二.目的 在Windows下通过SecureCRT(putty也可)远程登录到 ...

  7. Codeforces Round 890 (Div. 2)

    Tales of a Sort 题解 找到最大的能够产生逆序对的数即可 暴力\(O(n^2)\)枚举即可 const int N = 2e5 + 10, M = 4e5 + 10; int n; in ...

  8. HZNU Winter Trainning 7 补题 - Zeoy

    CodeForces - 1660C 题目传送门:https://vjudge.net/contest/535955#problem/C 题意:询问一个字符串最少删去几个字符,能够把这个字符串变成aa ...

  9. HTML img标签

    1.基本用法 <img src="kof5.jpg" alt="特瑞"> src属性为图片的链接地址,如果图片加载失败,代替图片的就是alt属性设置 ...

  10. Qt No Target Architecture

    在QT中引入processthreadsapi.h,如果出现 "No Target Architecture",需要在processthreadsapi.h前引入windows.h ...