Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)
?昨晚的沒來得及打,最近錯過好幾場CF了,這場應該不算太難
A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard input output standard outputArray 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.
InputThe 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.
OutputPrint "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 5
10 20 30 20 10 output YES input 4
1 2 1 2 output NO input 7
3 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 outputThere 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.
InputThe 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.
OutputPrint the text if the same keys were pressed in the second layout.
Examples input qwertyuiopasdfghjklzxcvbnmveamhjsgqocnrbfxdtwkylupzi
TwccpQZAvb2017 output HelloVKCup2017 input mnbvcxzlkjhgfdsapoiuytrewq
asdfghjklqwertyuiopzxcvbnm
7abaCABAABAcaba7 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 outputPolycarp 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.
InputThe 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.
OutputPrint 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 20
10 output 3 input 2 2
-2000 -2000
3998000 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 outputThere 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.
InputThe first line contains three integers?n,?k?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.
OutputPrint the minimum time (in seconds) needed for all?n?to reach the office with keys.
Examples input 2 4 5020 100
60 10 40 80 output 50 input 1 2 10
11
15 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 outputVasily 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.
InputThe 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.
OutputPrint the total number of times Vasily takes the top card from the deck.
Examples input 46 3 1 2 output 7 input 1
1000 output 1 input 7
3 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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到和亲姐姐说话是什么意思
- 下一篇: 梦到来月经找厕所是什么意思