Codeforces Round #FF (Div. 2) 题解
A. DZY Loves Hash
1 second
256 megabytes
standard input
standard output
DZY has a hash table with p buckets,
numbered from 0 to p - 1.
He wants to insert n numbers, in the order they are given, into the hash table. For the i-th
number xi,
DZY will put it into the bucket numbered h(xi),
where h(x) is the hash function. In this problem we will assume,
that h(x) = x mod p. Operation a mod b denotes
taking a remainder after division a by b.
However, each bucket can contain no more than one element. If DZY wants to insert an number into a bucket which is already filled, we say a "conflict" happens. Suppose the first
conflict happens right after the i-th insertion, you should output i.
If no conflict happens, just output -1.
The first line contains two integers, p and n (2 ≤ p, n ≤ 300).
Then n lines follow. The i-th
of them contains an integer xi (0 ≤ xi ≤ 109).
Output a single integer — the answer to the problem.
10 5
0
21
53
41
53
4
5 5
0
1
2
3
4
-1
链接:http://codeforces.com/contest/447
题意:找出hash时第一次产生冲突的位置。
解题思路:用一个数组表示是否存放有hash之后的元素,0表示这个位置还没有使用过。1表示这个位置上有hash之后的元素(即产生了冲突)。
代码:
#include <cstdio>
#include <cstring>
const int MAXN = 305;
int a[MAXN], p, n, ans = -1;
int main()
{
bool flag = true;
scanf("%d%d", &p, &n);
for(int i = 0; i < n; i++)
{
int x;
scanf("%d", &x);
if(flag)
{
if(0 == a[x % p])
{
a[x % p] = 1;
}
else
{
ans = i + 1;
flag = false;
}
}
}
printf("%d\n", ans);
return 0;
}
1 second
256 megabytes
standard input
standard output
DZY loves collecting special strings which only contain lowercase letters. For each lowercase letter c DZY
knows its value wc.
For each special string s = s1s2... s|s| (|s| is
the length of the string) he represents its value with a function f(s), where

Now DZY has a string s. He wants to
insert k lowercase letters into this string in order to get the largest possible value of the resulting
string. Can you help him calculate the largest possible value he could get?
The first line contains a single string s (1 ≤ |s| ≤ 103).
The second line contains a single integer k (0 ≤ k ≤ 103).
The third line contains twenty-six integers from wa to wz.
Each such number is non-negative and doesn't exceed 1000.
Print a single integer — the largest possible value of the resulting string DZY could get.
abc
3
1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
41
In the test sample DZY can obtain "abcbbc", value = 1·1 + 2·2 + 3·2 + 4·2 + 5·2 + 6·2 = 41.
链接:http://codeforces.com/contest/447/problem/B
题意:在给出的字符串中添加k个字符,求能够得到的最大权值和。
解题思路:找出最大的位权,将k个有最大位权的字符放到原字符串的末尾。求权值和。ps:答案可能会超出int。要用long long
代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
int k, a[27], imax = -1;
cin >> s >> k;
for(int i = 0; i < 26; i++)
{
cin >> a[i];
if(a[i] > imax)
{
imax = a[i];
}
}
long long ans = 0;
int len = s.length();
for(int i = 0; i < len; i++)
{
ans += a[s[i] - 'a'] * (i + 1);
}
ans += (long long)imax * k * (2 * len + k + 1) / 2;
cout << ans << endl;
}
1 second
256 megabytes
standard input
standard output
DZY has a sequence a, consisting of n integers.
We'll call a sequence ai, ai + 1, ..., aj (1 ≤ i ≤ j ≤ n) a
subsegment of the sequence a. The value (j - i + 1) denotes
the length of the subsegment.
Your task is to find the longest subsegment of a,
such that it is possible to change at most one number (change one number to any integer you want) from the subsegment to make the subsegment strictly increasing.
You only need to output the length of the subsegment you find.
The first line contains integer n (1 ≤ n ≤ 105).
The next line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109).
In a single line print the answer to the problem — the maximum length of the required subsegment.
6
7 2 3 1 5 6
5
You can choose subsegment a2, a3, a4, a5, a6 and
change its 3rd element (that is a4)
to 4.
链接:http://codeforces.com/contest/447/problem/C
题意:从一串数字中选出一个子串。能够改变子串中一个数字的值得到一个新的子串,求最大的递增新子串的长度。
解题思路:
将原数组切割成递增的子串,记录下每一个子串的開始和结束位置,以及长度。
接下来要分几种情况讨论:1.相邻的两个子串改变一个数字之后,能够合并形成新的递增子串。2.相邻的3个子串,中间子串长度为1。改变中间的数字后能够形成新的递增子串,3.相邻的子串不能合并形成新的递增子串,可是能够在原串的基础上。得到一个长度添加1的新的递增子串(在子串开头位置前有数字。或是结束位置后有数字)。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 100010;
int a[MAXN];
struct P
{
int l, len, r;
};
P p[MAXN];
int n;
int main()
{
memset(p, 0, sizeof(p));
scanf("%d", &n);
int t = 0;
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if(!i)
{
p[t].len++;
p[t].l = p[t].r = i;
continue;
}
if(a[i] <= a[i - 1])
{
t++;
}
if(0 == p[t].len)
{
p[t].l = i;
}
p[t].len++;
p[t].r = i;
}
int ans = p[0].len < n ?
p[0].len + 1 : p[0].len;
for(int i = 1; i <= t; i++)
{
ans = max(ans, p[i].len + 1);
if(a[p[i].l] > a[p[i - 1].r - 1] + 1 ||
a[p[i].l + 1] > a[p[i - 1].r] + 1)
{
ans = max(ans, p[i].len + p[i - 1].len);
}
if(i >= 2 && 1 == p[i - 1].len &&
a[p[i].l] > a[p[i - 2].r + 1])
{
ans = max(ans, p[i].len + p[i - 2].len + 1);
}
// printf("%d \n", p[i].len);
}
printf("%d\n", ans);
return 0;
}
Codeforces Round #FF (Div. 2) 题解的更多相关文章
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- DP Codeforces Round #FF (Div. 1) A. DZY Loves Sequences
题目传送门 /* DP:先用l,r数组记录前缀后缀上升长度,最大值会在三种情况中产生: 1. a[i-1] + 1 < a[i+1],可以改a[i],那么值为l[i-1] + r[i+1] + ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- Codeforces Round #160 (Div. 1) 题解【ABCD】
Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...
随机推荐
- Java8学习笔记(九)--日期/时间(Date Time)API指南
Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间处理的一致性方法,因此日期/时间API也是除Java核心API以外另一项倍受欢迎的内容 ...
- hadoop源码学习(-)
这是从hadoop源码中间截取的一个片段,你看看你能不能看懂:如果不能看懂,说明你的javase基础很差. private static class GroupFactory extends Coun ...
- 10.16 正式开发stark组件(一)
2018-10-16 17:26:44 Django MTV 路由配置里面有 反向解析 参考连接:https://www.cnblogs.com/yuanchenqi/articles/762993 ...
- day_4_25 py
''' 递归: 如果一个函数在内部不调用其它的函数, 而是自己本身的话,这个函数就是递归函数 ''' def factor(num): if num >1: result = num*facto ...
- day_6.5 py
Wireshark的使用 2018-6-5 20:16:05 明天学 03
- 低耦合高内聚 - 不要把所有东西都放在 vuex中
我就举一个例子.比如,我想看电视,是否需要遥控器??请认真思考这个问题. 看似电视与“我”已经解耦了.然而,我需要通过遥控器去看电视,我的目的是看电视,但是我却需要依赖遥控器这个中间件.这就变相地将“ ...
- 三剑客之grep
简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...
- python爬虫重定向次数过多问题
错误提示如下: raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects, response=resp)requests ...
- svn的安装方法
SVN的安装很常用.但是我好像经常用了之后就忘记.这次把笔记放在这里,如果以后忘了,就可以随时查看了. 步骤: 一.下载SVN 这里常用的是site.zip. 之前是手头有现成的site.zip.今天 ...
- F#周报2018年第49期
新闻 ML.NET 0.8--Machine Learning for .NET .NET Core 3预览 1以及开源Windows桌面框架 .NET Core 2.2 尝试C# 8.0 .NET ...