昨晚的没来得及打,最近错过好几场CF了,这场应该不算太难

A. Unimodal Array
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Array of integers is unimodal, if:

  • it is strictly increasing in the beginning;
  • after that it is constant;
  • after that it is strictly decreasing.

The first block (increasing) and the last block (decreasing) may be absent. It is allowed that both of this blocks are absent.

For example, the following three arrays are unimodal: [5, 7, 11, 11, 2, 1], [4, 4, 2], [7], but the following three are not unimodal: [5, 5, 6, 6, 1], [1, 2, 1, 2], [4, 5, 5, 6].

Write a program that checks if an array is unimodal.

Input

The first line contains integer n (1 ≤ n ≤ 100) — the number of elements in the array.

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 1 000) — the elements of the array.

Output

Print "YES" if the given array is unimodal. Otherwise, print "NO".

You can output each letter in any case (upper or lower).

Examples
input
61 5 5 5 4 2

output
YES

input
510 20 30 20 10

output
YES

input
41 2 1 2

output
NO

input
73 3 3 3 3 3 3

output
YES

Note

In the first example the array is unimodal, because it is strictly increasing in the beginning (from position 1 to position 2, inclusively), that it is constant (from position 2 to position 4, inclusively) and then it is strictly decreasing (from position 4 to position 6, inclusively).

这个A可能比B还要难一点,给你一个序列,满足左侧严格递增,中间相等,右侧严格递减,左右也可以为空,你判定下

#include <bits/stdc++.h>
using namespace std;
int main() {int n;int a[105];cin>>n;for(int i=1; i<=n; i++)cin>>a[i];int f1=1;a[n+1]=a[0]=1<<30;int f=2;while(a[f]>a[f-1]) f++;while(a[f]==a[f-1]) f++;while(a[f]<a[f-1]) f++;if(f<=n) cout<<"NO"<<endl;else cout<<"YES"<<endl;return 0;
}

B. Keyboard Layouts
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

There are two popular keyboard layouts in Berland, they differ only in letters positions. All the other keys are the same. In Berland they use alphabet with 26 letters which coincides with English alphabet.

You are given two strings consisting of 26 distinct letters each: all keys of the first and the second layouts in the same order.

You are also given some text consisting of small and capital English letters and digits. It is known that it was typed in the first layout, but the writer intended to type it in the second layout. Print the text if the same keys were pressed in the second layout.

Since all keys but letters are the same in both layouts, the capitalization of the letters should remain the same, as well as all other characters.

Input

The first line contains a string of length 26 consisting of distinct lowercase English letters. This is the first layout.

The second line contains a string of length 26 consisting of distinct lowercase English letters. This is the second layout.

The third line contains a non-empty string s consisting of lowercase and uppercase English letters and digits. This is the text typed in the first layout. The length of s does not exceed 1000.

Output

Print the text if the same keys were pressed in the second layout.

Examples
input
qwertyuiopasdfghjklzxcvbnmveamhjsgqocnrbfxdtwkylupziTwccpQZAvb2017

output
HelloVKCup2017

input
mnbvcxzlkjhgfdsapoiuytrewqasdfghjklqwertyuiopzxcvbnm7abaCABAABAcaba7

output
7uduGUDUUDUgudu7

这个B比较简单,两个键盘顺序不一样,按同样的键位在B上显示什么,注意大小写转换还有数字

#include <bits/stdc++.h>
using namespace std;
int main() {map<char,char>mp;string s1,s2,c;cin>>s1>>s2>>c;for(int i=0;s1[i];i++)mp[s1[i]]=s2[i];for(int i=0;c[i];i++){char s;if(c[i]>='0'&&c[i]<='9')s=c[i];else if(c[i]>='a'&&c[i]<='z')s=mp[c[i]];else s=mp[c[i]+32]-32;cout<<s;}return 0;
}

C. Jury Marks
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Polycarp watched TV-show where k jury members one by one rated a participant by adding him a certain number of points (may be negative, i. e. points were subtracted). Initially the participant had some score, and each the marks were one by one added to his score. It is known that the i-th jury member gave ai points.

Polycarp does not remember how many points the participant had before this k marks were given, but he remembers that among the scores announced after each of the k judges rated the participant there were n (n ≤ k) values b1, b2, ..., bn (it is guaranteed that all values bj are distinct). It is possible that Polycarp remembers not all of the scores announced, i. e. n < k. Note that the initial score wasn't announced.

Your task is to determine the number of options for the score the participant could have before the judges rated the participant.

Input

The first line contains two integers k and n (1 ≤ n ≤ k ≤ 2 000) — the number of jury members and the number of scores Polycarp remembers.

The second line contains k integers a1, a2, ..., ak ( - 2 000 ≤ ai ≤ 2 000) — jury's marks in chronological order.

The third line contains n distinct integers b1, b2, ..., bn ( - 4 000 000 ≤ bj ≤ 4 000 000) — the values of points Polycarp remembers. Note that these values are not necessarily given in chronological order.

Output

Print the number of options for the score the participant could have before the judges rated the participant. If Polycarp messes something up and there is no options, print "0" (without quotes).

Examples
input
4 1-5 5 0 2010

output
3

input
2 2-2000 -20003998000 4000000

output
1

Note

The answer for the first example is 3 because initially the participant could have  - 10, 10 or 15 points.

In the second example there is only one correct initial score equaling to 4 002 000.

枚举暴力,这个题的意思就是给你一名选手的n个得分,给出k个评委的得分,原始分数有多少种可能

关键就是我在枚举分数的过程中,怎么知道这个是可以的,我选择前缀和然后查找

#include <bits/stdc++.h>
using namespace std;
int b[2010];
set<int>s;
int main() {int k,n,p=0;cin>>n>>k;for(int i=1; i<=n; i++) {int q;cin>>q;p+=q;s.insert(p);}for(int i=1; i<=k; i++) {cin>>b[i];}sort(b+1,b+k+1);int ans=0;for(auto &node:s) {int f=1;for(int j=1; j<=k; j++) {if(!s.count(node-b[1]+b[j])) {f=0;break;}}if(f)ans++;}cout<<ans<<endl;}

D. Office Keys
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

There are n people and k keys on a straight line. Every person wants to get to the office which is located on the line as well. To do that, he needs to reach some point with a key, take the key and then go to the office. Once a key is taken by somebody, it couldn't be taken by anybody else.

You are to determine the minimum time needed for all n people to get to the office with keys. Assume that people move a unit distance per 1 second. If two people reach a key at the same time, only one of them can take the key. A person can pass through a point with a key without taking it.

Input

The first line contains three integers nk and p (1 ≤ n ≤ 1 000, n ≤ k ≤ 2 000, 1 ≤ p ≤ 109) — the number of people, the number of keys and the office location.

The second line contains n distinct integers a1, a2, ..., an (1 ≤ ai ≤ 109) — positions in which people are located initially. The positions are given in arbitrary order.

The third line contains k distinct integers b1, b2, ..., bk (1 ≤ bj ≤ 109) — positions of the keys. The positions are given in arbitrary order.

Note that there can't be more than one person or more than one key in the same point. A person and a key can be located in the same point.

Output

Print the minimum time (in seconds) needed for all n to reach the office with keys.

Examples
input
2 4 5020 10060 10 40 80

output
50

input
1 2 101115 7

output
7

Note

In the first example the person located at point 20 should take the key located at point 40 and go with it to the office located at point 50. He spends 30 seconds. The person located at point 100 can take the key located at point 80 and go to the office with it. He spends 50seconds. Thus, after 50 seconds everybody is in office with keys.

这个其实就是dp啊

先将排序,假设第i个人拿到的钥匙是第k[i]个,那么显然k[i]<k[i+1]。dp[i][j]表示第i个人拿第j个钥匙,前i个人走的最大距离的最小值
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e3+10;
int a[N],b[N],d[N][N];
int main()
{int n,k,p;cin>>n>>k>>p;for(int i=0;i<n;i++)scanf("%d",a+i);for(int i=0;i<k;i++)scanf("%d",b+i);sort(a,a+n);sort(b,b+k);d[0][0]=abs(a[0]-b[0])+abs(b[0]-p);for(int i=1;i<=k-n;i++)d[0][i]=min(d[0][i-1],abs(a[0]-b[i])+abs(b[i]-p));for(int i=1;i<n;i++){d[i][i-1]=2e9+10;for(int j=i;j<=k-n+i;j++)d[i][j]=min(d[i][j-1],max(d[i-1][j-1],abs(a[i]-b[j])+abs(b[j]-p)));}cout<<d[n-1][k-1];return 0;
}

E. Cards Sorting
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Vasily has a deck of cards consisting of n cards. There is an integer on each of the cards, this integer is between 1 and 100 000, inclusive. It is possible that some cards have the same integers on them.

Vasily decided to sort the cards. To do this, he repeatedly takes the top card from the deck, and if the number on it equals the minimum number written on the cards in the deck, then he places the card away. Otherwise, he puts it under the deck and takes the next card from the top, and so on. The process ends as soon as there are no cards in the deck. You can assume that Vasily always knows the minimum number written on some card in the remaining deck, but doesn't know where this card (or these cards) is.

You are to determine the total number of times Vasily takes the top card from the deck.

Input

The first line contains single integer n (1 ≤ n ≤ 100 000) — the number of cards in the deck.

The second line contains a sequence of n integers a1, a2, ..., an (1 ≤ ai ≤ 100 000), where ai is the number written on the i-th from top card in the deck.

Output

Print the total number of times Vasily takes the top card from the deck.

Examples
input
46 3 1 2

output
7

input
11000

output
1

input
73 3 3 3 3 3 3

output
7

Note

In the first example Vasily at first looks at the card with number 6 on it, puts it under the deck, then on the card with number 3, puts it under the deck, and then on the card with number 1. He places away the card with 1, because the number written on it is the minimum among the remaining cards. After that the cards from top to bottom are [2, 6, 3]. Then Vasily looks at the top card with number 2 and puts it away. After that the cards from top to bottom are [6, 3]. Then Vasily looks at card 6, puts it under the deck, then at card 3 and puts it away. Then there is only one card with number 6 on it, and Vasily looks at it and puts it away. Thus, in total Vasily looks at 7 cards.

E是个线段树维护区间最小值,可是我一脸懵bi

转载于:https://www.cnblogs.com/BobHuang/p/7173079.html

Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)相关推荐

  1. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction 并查集

    C. String Reconstruction 题目连接: http://codeforces.com/contest/828/problem/C Description Ivan had stri ...

  2. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 树状数组

    链接: http://codeforces.com/contest/828/problem/E 题解: 给你一个字符串s  q次操作 op==1 改变s[pos]位置的字符  op==2 将字符串e复 ...

  3. D. Best Edge Weight(最小生成树 + 树链剖分)(Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals))

    D. Best Edge Weight 给定一个有nnn个点mmm条边的无向连通图,有mmm次询问,每次询问第iii条边的权值最大为多少,这张图的所有最小生成树的方案中,一定包含第iii条边. 先跑一 ...

  4. 【Codeforces Round #424 (Div. 2) C】Jury Marks

    [Link]:http://codeforces.com/contest/831/problem/C [Description] 有一个人参加一个比赛; 他一开始有一个初始分数x; 有k个评委要依次对 ...

  5. Codeforces Round #424 (Div. 2)

    D题fst了,生无可恋.第二场rated的CF,打得精神恍惚 A. Unimodal Array 题意:判断数列是否是单峰的. 像题意那样分为三个阶段随便判一判就好了 #include<iost ...

  6. Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)切题报告(A-B题)

    这是我第二次参加CF比赛,也是第一次写博客,写得不好,望各位大佬海涵. A. Single Wildcard Pattern Matching 原题链接 这道题,这是难到让人无法直视,太水了. 题目大 ...

  7. Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))

    Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) 题号 题目 知识点 A Simply Strange Sor ...

  8. Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) A-F全题解

    Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) 文章目录 A. Simply Strange Sort B. ...

  9. C. Tyler and Strings(组合数学,树状数组维护前缀和)(Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad i)

    对我来说比较困难的一题了,尝试着自己写了一下,调不出来遂放弃. Codeforces Round #775 (Div. 1, based on Moscow Open Olympiad in Info ...

最新文章

  1. python读取json文件报 No JSON object could be decoded
  2. MySQL中的用户管理
  3. 初识github之注册和基本概念
  4. linux运行360sh,在深度deepin系统中运行install.sh文件的方法
  5. element-UI级联选择器(Cascader 回显、默认显示项) - (返回结果的)格式转化 - 代码篇
  6. 2013年最新最热播的电影 合集
  7. ros开发增加clion常用模板及初始化配置(五)
  8. 总结《Ray Tracing from the Ground Up》
  9. 编写安全的驱动程序之验证驱动的调用者
  10. linux sz命令详解,Linux中rz命令和sz命令使用详解大全
  11. 批量修改文件夹名称的一部分字符
  12. plot函数linewidth区别
  13. outlook附加文件超过服务器允许大小,如何在Outlook中更改或增加附件大小限制?...
  14. JS生成唯一id方式介绍(UUID和NanoID)
  15. Java项目:基于SSM的疫情物业系统
  16. Java 实习要掌握的知识
  17. mysql compact_[MySQL]InnoDB行格式剖析_MySQL - compact
  18. 叶问纵横四海战法公式
  19. Adobe-Photoshop(PS)-脚本开发-去除文件臃肿脚本
  20. 山东大学项目实训——地图圈系统——微信小程序(16)

热门文章

  1. 黑色背景下,将照片内封闭空心图案的空心区域染成Cyan并保存
  2. 面型对象 (包package)
  3. sqlserver2008导出mysql_SQLserver 2008将数据导出到Sql脚本文件的方法
  4. uva 11400——Lighting System Design
  5. 粗谈pragma once与 #ifndef的区别
  6. C语言关键字 ISO/ANSI C90 C99 C11
  7. 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
  8. pthread_join函数
  9. Java-进阶:Java-File--IO—2
  10. java 注解 方法 参数_java在注解中绑定方法参数的解决方案