【Codeforces Round 521】Codeforces #295(div. 1)

521A DNA Alignment

题意:给一个字符串\(s\),求有多少个\(t\)使得\(\rho(s,t)\)最大。

其中,\(t\)是一个和\(s\)等长的串,

\(\rho(s,t)=\max_{i=0}^{n-1}\max_{j=0}^{n-1}h(shift(s,i),shift(t,i))\)

\(h(s,t)=\sum_{i=0}^ns_i\ne t_i\)

\(shift(s,i)=s_{i+1\dots n}+s_{1\dots i}\)

思路:首先我们看最大的答案是多少。

如果我们把\(t\)全放上最大出现次数的字符,那么每一次\(shift\)都会有这么多个该字符记录进去。就是(这个字符出现次数)\(\times n^2\)。

那么这个次数肯定是最大的。因为其他情况中不太可能每一回都有相同的数。

那么我们的答案就是(最大出现次数的字符个数)\(^n\)。

因为我们如果\(t\)中每一位都是某个出现次数最大的字符,那么我们每一次\(shift\)都有\(n\)次跑到这个字符的出现位置上。

我第一开始看错题了,以为只是要求最大的那个\(\rho\)的值。

521B Cubes

题意:给一堆点,现在某个点肯定是被下方离他距离最近的三个点之一“托”着。

然后现在要不断地去取走某个点,然后使得去掉这个点后的还满足每个点被某个点“托”着。

两个人依次取,第一个人要求最后的序列字典序最大,第二个人要求最小。

问最后取出来的序列是怎么样的,用\(n\)进制表示。

思路:首先就是建图。

我们把一个点托着的点们连到他,作为图\(g\);把这个点练到所有托着他的点,作为图\(rg\)。

那么我们就可以进行类似“拓扑排序”的东西。

就是说我们每次找到最大/最小编号的不会改变原图状态的点,把他删掉,进行对其托着的点以及托着他的点的改变。

那么我们就要看如果我们把一个点干掉之后会对他上下两层有什么影响。

首先看对上层的影响。

因为这个点现在突然消失,那么我们就知道上面的点会失去一个支撑,就会使与当前点同级的点不能随便删去。

这样的话我们就是从当前点沿着rg走一步,再沿着g走一步,走到的这些点判断一下是否可以删掉。

对于下层,由于他们可以少托一个点,说不定可能就被允许删除了。所以我们从这个点沿着g走一步,这些点判断以下是否可以删掉。

那么取出最大/最小的可删除的点就是通过一个set来处理。

用C++11的特性更好写。。。

521C Pluses everywhere

题意:给一个数字串,问将其间加入\(k\)个+之后最后所有的和的和。

思路:肯定是不能把每一个和都求出来的。。。所以我们只看一个位置上的数对总数作的贡献

那么我们就是说要找到这个位置上的数在每一位(个十百千万)上出现的次数。

即对于\(i\)位而言,\(\sum_{l=0}^{n-2-i}10^lC_{n-2-l}^{k-1}d_i+10^{n-1-i}C_{i}^{k}d_i\),

其中第二段的意思是这个加数一直到最后,没有最终的加号。

这样是肯定\(tle\)的,那么前半段就转化成以\(l\)的循环:

\(\sum_{l=0}^{n-1-k}10^lC_{n-2-l}^{k-1}\sum_{i=0}^{n-2-l}d_i\)。

这样只是求一个前缀和、10的幂、阶乘(及其逆元)即可。

原文地址:https://www.cnblogs.com/denverjin/p/10912529.html

时间: 2024-10-12 02:18:18

【Codeforces Round 521】Codeforces #295(div. 1)的相关文章

【SDUT OJ 2610】 Boring Counting(主席树)

[SDUT OJ 2610] Boring Counting(主席树) Boring Counting Time Limit: 3000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 In this problem you are given a number sequence P consisting of N integer and Pi is the ith element in the sequence. Now you task is to ans

【网络流24题】圆桌聚餐(最大流)

[网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做一个该单位的人 所以,每个单位向桌子连边,容量为1 然后跑一边最大流求方案就行了 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath&

【大话存储II】学习笔记(15章),文件级集群系统

[大话存储II]学习笔记(15章),块级集群存储系统里面分析的主要是块集群系统,同样文件级存储也可以集群化. 因为NAS系统的前端网络是以太网,速度比较低,导致NAS主要用于一些非关键业务中,比如文件共享.但是一些特殊应用也需要多主机同时访问某个大文件,比如3D渲染集群等.如果我们使用块集群存储系统,则会存在一个问题,需要在应用程序上引入文件锁,而NAS的文件系统一般都自带有文件锁机制,所以还不如把NAS存储系统进行集群化. 在谈怎么样把NAS系统进行集群化之前,我们说说集群文件系统的架构.集群

【Codeforces Round 1129】[Alex Lopashev Thanks-Round] (Div. 1)

Codeforces Round 1129 这场模拟比赛做了\(A1\).\(A2\).\(B\).\(C\),\(Div.1\)排名40. \(A\)题是道贪心,可以考虑每一个站点是分开来的,把目的地最小编号的留到最后,所以答案稍微算一下就行了. \(B\)题是道找规律,首先可以很容易地发现只要前面弄个负数的开头,错误算法就会忽略掉这一个值,所以利用这个来构造答案.(最讨厌构造题了)然后推导一番式子就会发现如果我们将第一个值放-1,则 \(\sum_{i=2}^na_i=k+n\), 再更改一

Educational Codeforces Round 23 F. MEX Queries(线段树)

题目链接:Educational Codeforces Round 23 F. MEX Queries 题意: 一共有n个操作. 1.  将[l,r]区间的数标记为1. 2.  将[l,r]区间的数标记为0. 3.  将[l,r]区间取反. 对每个操作,输出标记为0的最小正整数. 题解: hash后,用线段树xjb标记一下就行了. 1 #include<bits/stdc++.h> 2 #define ls l,m,rt<<1 3 #define rs m+1,r,rt<&l

【noip模拟题】日历游戏(博弈论+搜索)

直接搜索即可... 注意不要爆栈..所以我们可以分块搜索... 然后太懒且太弱我就不写了... orz hzwer [问题描述] moreD和moreD的宠物CD正在玩一个日历游戏,开始时,他们从1900年1月1日到2012年12月22日(你懂的……)选一个日期开始,依次按照如下规则之一向后跳日期: 1. 跳到日历上的下一天. 2. 跳到日历上的下个月的同一天(如果不存在,则不能这么做). 要是谁正好到达2012年12月22日那么他就赢了,如果到达这天之后的日期那他就输了——原因你也懂的. 每次

【算法竞赛入门经典】【第三章】课后习题(第一部分)

课后习题第三波来了,到第三章之后代码之类的稍微变长了一些,所以我把这一章的答案分为几部分.这一章重点是字符串的处理,对于字符串问题,通常只要细心就没有问题了,下面不多说了直接上详解. 习题3-1 分数统计(stat) 任务1:这个比较简单就直接上代码了: #include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXN 100 + 10 int cmp(const void*a,const v

【大话存储II】学习笔记(15章),块级集群存储系统

存储系统演变 存储系统一直以来都是一个总的控制器加上几串磁盘扩展柜存在的,但是随着数据量的快速增加,性能受限于控制器,所以要提升整体的处理能力,主要有两种方法: 最简单的是在单个控制器中加入更多的CPU.内存等,就如同PC机性能不够了,就加内存.换SSD等.这种扩展方式称为带内扩展,Scale-up 这种方式的问题是,随着CPU数量的增多,耗费的设计成本会越来越大.比如说在多CPU的系统中,我们需要花费大量的精力来保证CPU之间的通信.可见[大话存储]多CPU架构变迁, SMP,NUMA,MPP

【Linux相识相知】文件查找(locate/find)

在用linux操作系统的时候,当我们忘记之前某个文件存储的位置,但是知道其文件名或者模糊的知道其文件名,我们都可以通过文件查找工具来查找,linux提供两种常用的查找工具,locate和find,在日常使用中后者比前者较前者功能更强大更具有实时性,下面我们就这两种工具来谈一谈她们的使用方法. Locate locate是基于实现构建好的索引库(索引库可以理解成文件路径的集合),索引库的位置放在/var/lib/mlocate/mlocate.db文件里面,系统一般一天会自动更新一次,也可以使用u