Codeforces Round #441 (Div. 2)

A. Trip For Meal

题目描述:给出\(3\)个点,以及任意两个点之间的距离,求从\(1\)个点出发,再走\(n-1\)个点的最短路径。

solution
当\(n=1\)时,答案为\(0\),当\(n=2\)时,答案等于与开始点相连的两条边的最小值,当\(n>2\)时,答案等于与开始点相连的两条边的最小值+三条边最小值*\((n-2)\)
时间复杂度:\(O(1)\)

B. Divisiblity of Differences

题目描述:给出\(n\)个数,从中选出\(k\)个数,使得任意两个选出的数的差是\(m\)的倍数。输出其中一种方案。

solution
两个数的差是\(m\)的倍数,说明这两个数对\(m\)取余相等。所以可以统计对\(m\)取余每种余数有多少个,如果某一种余数超过或等于\(k\)个,则随意选择\(k\)个该种余数的数即是答案。
时间复杂度:\(O(n)\)

C. Classroom Watch

题目描述:给出一个数\(n\),求有哪些正整数\(x\),满足\(x\)的每一位的数的和加\(x\)等于\(n\)。

solution
因为\(n \leq 10^9\),所以\(x\)的每一位的数的和最大是\(90\),由于加法只能产生百位加一的效果,所以\(x\)的最高位到百位与\(n\)相同,或是\(x\)的百位比\(n\)少一。按此分成两种情况,然后枚举十位和个位即可。
时间复杂度:\(O(200)\)

D. Sorting the Coins

题目描述:一行\(n\)个'o',然后依次将第\(p[i]\)位的'o'变成'x',每次改变后进行以下操作:从左看到右,如果遇到第\(i\)位为'o',\(i+1\)位为'x',则交换这两位,然后从第\(i+1\)位继续往右看。如果某一轮看完后没有进行交换操作,则结束,输出看了多少轮,然后进行下一次的改变。

solution
手工画了样例后发现,除了最右边的连续的'x'不用动之外,其它'x'都要通过看一轮使它成为最右边连续的'x',所以只要维护最右边有多少个连续的'x'即可。
时间复杂度:\(O(n)\)

E. National Property

题目描述:给出\(n\)个字符串,字符串的每一位都是一个数字,数字有大小写之分,任意大写数字比任意小写数字小,同种数字比较时,数字小的比较小。现在把某种数字从小写变成大写,使得这\(n\)个字符串从小到大排好序,输出一种可行的方案。

solution
考虑相邻两个字符串,只要所有的相邻字符串都满足前者小于后者,则这\(n\)个数就已经从小到大排好。相邻字符串比较:从左到右找到第一个不同的位置:
1、如果前者为数字,后者为空,则无解;
2、如果前者为空,后者为数字,则不用任何操作;
3、如果前者数字大于后者数字,则前者数字一定要变为大写;
4、如果前者数字小于后者数字,则这两种数字要同为大写或小写。
根据最后一种情况,我们可以从后者数字连一条有向边到前者数字,表示如果某个点变为大写(true),则连出去的边指向的点都要为true,这就有点像2-SAT,但不同的是2-SAT可能有环,需要缩点,而这题一定不会有环。构图后按照2-SAT构造解的方式构造答案即可。
时间复杂度:\(O(n)\)

F. High Cry

题目描述:给出一个数组\(a[i]\),求数对\((x, y)\)的个数,\((x, y)\)满足\((a[x] | a[x+1] | ... | a[y])>max\){\(a[x], a[x+1], ..., a[y]\)}

solution
从表达式可知,最大值是一个重要的值。所以可以枚举一个位置\(i\)作为数对\((x, y)\)之间的最大值,那么先可以预处理出\(i\)左边离\(i\)最近的大于\(a[i]\)的位置\(L[i]\),以及\(i\)右边离\(i\)最近的大于\(a[i]\)的位置\(R[i]\),因为\(x\)一定在\((L[i], i]\)中选,\(y\)一定在\([i, R[i])\)中选。
那\(x,y\)可以选什么位置呢?因为最后或操作后的数要大于\(a[i]\),所以只要\([x, y]\)中存在一个数与\(a[i]\)或操作后大于\(a[i]\)即可,即存在一个数,\(a[i]\)的二进制第\(w\)位为\(0\),但它的第\(w\)位为\(1\)。所以我们可以预处理出\(i\)的左边离\(i\)最近的二进制第\(j\)位为\(1\)的位置\(Lone[i][j]\),以及\(i\)的右边离\(i\)最近的二进制第\(j\)位为\(1\)的位置\(Rone[i][j]\)。
这样\(x\)的可选范围是\((L[i], max\){\(Lone[i][j]\)}\(]\), \(y\)的可选范围是\([min\){\(Rone[i][j]\)}\(, R[i])\),而求答案时只要\(x,y\)有一个在可选范围内就是正确答案。
要注意的是\(a[i]\)相等的情况,可以规定\(a[L[i]] \geq a[i], a[R[i]]>a[i]\),这样就能避免重复计算。
时间复杂度:\(O(nlogn)\)

Codeforces Round #441 (Div. 2)的更多相关文章

  1. Codeforces Round #441 (Div. 2)【A、B、C、D】

    Codeforces Round #441 (Div. 2) codeforces 876 A. Trip For Meal(水题) 题意:R.O.E三点互连,给出任意两点间距离,你在R点,每次只能去 ...

  2. [日常] Codeforces Round #441 Div.2 实况

    上次打了一发 Round #440 Div.2 结果被垃圾交互器卡掉 $200$ Rating后心情复杂... 然后立了个 Round #441 要翻上蓝的flag QAQ 晚饭回来就开始搞事情, 大 ...

  3. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins

    http://codeforces.com/contest/876/problem/D 题意: 最开始有一串全部由"O"组成的字符串,现在给出n个数字,指的是每次把位置n上的&qu ...

  4. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) C. Classroom Watch

    http://codeforces.com/contest/876/problem/C 题意: 现在有一个数n,它是由一个数x加上x每一位的数字得到的,现在给出n,要求找出符合条件的每一个x. 思路: ...

  5. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) B. Divisiblity of Differences

    http://codeforces.com/contest/876/problem/B 题意: 给出n个数,要求从里面选出k个数使得这k个数中任意两个的差能够被m整除,若不能则输出no. 思路: 差能 ...

  6. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) A. Trip For Meal

    http://codeforces.com/contest/876/problem/A 题意: 一个人一天要吃n次蜂蜜,他有3个朋友,他第一次总是在一个固定的朋友家吃蜂蜜,如果说没有吃到n次,那么他就 ...

  7. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)

    A. Trip For Meal 题目链接:http://codeforces.com/contest/876/problem/A 题目意思:现在三个点1,2,3,1-2的路程是a,1-3的路程是b, ...

  8. Codeforces Round #441 Div. 1

    A:显然答案与原数的差不会很大. #include<iostream> #include<cstdio> #include<cmath> #include<c ...

  9. Codeforces Round #441(Div.2) F - High Cry

    F - High Cry 题目大意:给你n个数,让你找区间里面所有数或 起来大于区间里面最大数的区间个数. 思路:反向思维,找出不符合的区间然后用总数减去.我们找出每个数掌控的最左端 和最右端,一个数 ...

随机推荐

  1. bzoj4484[JSOI2015]最小表示

    题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路 ...

  2. 秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock (续)

    java 包实现了读写锁的操作: package com.multithread.readwritelock; import java.util.concurrent.CountDownLatch; ...

  3. VS中碰到的问题

    1.调试的时候,语句已经注释掉了,但是在执行的时候还是运行了(或者某些变量值改变后,程序依然用的之前数据). 右键解决方案-->清理,然后重新生成.

  4. 洛谷 P2574 XOR的艺术

    刚刚学了,线段树,一道线段树入门题试试水 下面是题面 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个 ...

  5. 洛谷P3938 斐波那契

    题目戳 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子 ...

  6. [HAOI2017]八纵八横 线性基

    题面 题面 题解 观察到题目中的 "内陆经济环" 不好处理,因此我们把它拆成 "内陆经济链". 对于1号节点,我们创建一个它的复制节点n + 1号节点,这个节点 ...

  7. 口胡:[HNOI2011]数学作业

    题面 一开始看这题看了好久--觉得这题不可做. 结果是看错题了,我居然看着一段长长的C开头的单词,然后就觉得这是卡特兰数--不知道我在想些什么-- 观察到对于 i = 1~9 : f[i] = f[i ...

  8. tmp_table_size ---> 优化 MYSQL 经验总结

    数据库连接突然增多到1000的问题 查看了一下,未有LOCK操作语句. 但是明显有好多copy to tmp table的SQL语句,这条语读的时间比较长,且这个表会被加读锁,相关表的update语句 ...

  9. Spring MVC POJO入参过程分析

    SpringMVC确定目标方法POJO类型的入参过程 1.确认一个key: (1).若目标方法的POJO类型的参数没有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写 ...

  10. Python内存分配

    一.前言 大多数编译型语言,变量在使用前必须先声明,其中C语言更加苛刻:变量声明必须位于代码块最开始,且在任何其他语句之前.其他语言,想C++和java,允许“随时随地”声明变量,比如,变量声明可以在 ...