博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Educational Codeforces Round 87 (Rated for Div. 2)----题目+题解(A、B)
阅读量:4035 次
发布时间:2019-05-24

本文共 5706 字,大约阅读时间需要 19 分钟。

文章目录

A. Alarm Clock

time limit per test2 seconds

memory limit per test256 megabytes
inputstandard input
outputstandard output
Polycarp has spent the entire day preparing problems for you. Now he has to sleep for at least a minutes to feel refreshed.

Polycarp can only wake up by hearing the sound of his alarm. So he has just fallen asleep and his first alarm goes off in b minutes.

Every time Polycarp wakes up, he decides if he wants to sleep for some more time or not. If he’s slept for less than a minutes in total, then he sets his alarm to go off in c minutes after it is reset and spends d minutes to fall asleep again. Otherwise, he gets out of his bed and proceeds with the day.

If the alarm goes off while Polycarp is falling asleep, then he resets his alarm to go off in another c minutes and tries to fall asleep for d minutes again.

You just want to find out when will Polycarp get out of his bed or report that it will never happen.

Please check out the notes for some explanations of the example.

Input

The first line contains one integer t (1≤t≤1000) — the number of testcases.

The only line of each testcase contains four integers a,b,c,d (1≤a,b,c,d≤109) — the time Polycarp has to sleep for to feel refreshed, the time before the first alarm goes off, the time before every succeeding alarm goes off and the time Polycarp spends to fall asleep.

Output

For each test case print one integer. If Polycarp never gets out of his bed then print -1. Otherwise, print the time it takes for Polycarp to get out of his bed.

Example

inputCopy
7
10 3 6 4
11 3 6 4
5 9 4 10
6 5 2 3
1 1 1 1
3947465 47342 338129 123123
234123843 13 361451236 361451000
outputCopy
27
27
9
-1
1
6471793
358578060125049
Note
In the first testcase Polycarp wakes up after 3 minutes. He only rested for 3 minutes out of 10 minutes he needed. So after that he sets his alarm to go off in 6 minutes and spends 4 minutes falling asleep. Thus, he rests for 2 more minutes, totaling in 3+2=5 minutes of sleep. Then he repeats the procedure three more times and ends up with 11 minutes of sleep. Finally, he gets out of his bed. He spent 3 minutes before the first alarm and then reset his alarm four times. The answer is 3+4⋅6=27.

The second example is almost like the first one but Polycarp needs 11 minutes of sleep instead of 10. However, that changes nothing because he gets 11 minutes with these alarm parameters anyway.

In the third testcase Polycarp wakes up rested enough after the first alarm. Thus, the answer is b=9.

In the fourth testcase Polycarp wakes up after 5 minutes. Unfortunately, he keeps resetting his alarm infinitely being unable to rest for even a single minute 😦

题意:

Polycarp每天需要睡a分钟的觉,在闹钟响之前睡了b分钟,如果他睡够了就直接起床,没睡够的话他就调闹钟在c分钟之后再响一次,但是每次入睡他都需要d分钟

思路:

题目比较基础,读懂题目就能做出来,不多说了直接贴代码,看代码就OK

代码:

#include
#include
#include
using namespace std;typedef long long ll;int main(){
int t; cin >> t; ll a, b, c, d; while (t--) {
cin >> a >> b >> c >> d; if (b >= a)//睡够了,直接起床 {
cout << b << endl; continue; } else {
if (d >= c)//还没睡着闹钟就响了,陷入死循环,永远也睡不醒 {
cout << "-1" << endl; continue; } int m = a - b, n = c - d; int k = ceil(m*1.0 / n);//向上取整,闹钟响k次 cout << b + c * k << endl; } } return 0;}

B. Ternary String

time limit per test2 seconds

memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given a string s such that each its character is either 1, 2, or 3. You have to choose the shortest contiguous substring of s such that it contains each of these three characters at least once.

A contiguous substring of string s is a string that can be obtained from s by removing some (possibly zero) characters from the beginning of s and some (possibly zero) characters from the end of s.

Input

The first line contains one integer t (1≤t≤20000) — the number of test cases.

Each test case consists of one line containing the string s (1≤|s|≤200000). It is guaranteed that each character of s is either 1, 2, or 3.

The sum of lengths of all strings in all test cases does not exceed 200000.

Output

For each test case, print one integer — the length of the shortest contiguous substring of s containing all three types of characters at least once. If there is no such substring, print 0 instead.

Example

inputCopy
7
123
12222133333332
112233
332211
12121212
333333
31121
outputCopy
3
3
4
4
0
0
4
Note
Consider the example test:

In the first test case, the substring 123 can be used.

In the second test case, the substring 213 can be used.

In the third test case, the substring 1223 can be used.

In the fourth test case, the substring 3221 can be used.

In the fifth test case, there is no character 3 in s.

In the sixth test case, there is no character 1 in s.

In the seventh test case, the substring 3112 can be used.

题意:

给你一个由 1 2 3 组成的字符串s,让你求s中包含 1 2 3 的最短连续字符串

思路:

思路:暴力的话枚举每一个字母,找到满足条件的最短的子串。O(n^2)

O(n^2)的区间问题常用优化有尺取法[双指针].O(n)

有i,j,两个快慢指针,i先走,当走到的位置发现已经有满足有1,2,3,那么这时候再让j往前走,更新长度,当[j,i]这段区间不满足了,那么i再走。

具体见代码

代码:

#include 
#include
#include
#include
const int MAXN = 2e5 + 10;const int inf = 0x3f3f3f3f;using namespace std;int n, m, K;char str[MAXN];int main() {
int t; scanf("%d ", &t); while (t--) {
scanf("%s ", str); int cnt[128] = {
0 }; int lef = 0, rig = -1, ans = inf; while (str[lef]) {
while (str[rig + 1] && !(cnt[(int)'1'] && cnt[(int)'2'] && cnt[(int)'3'])) {
cnt[(int)str[rig + 1]] ++; rig++; } if ((cnt[(int)'1'] && cnt[(int)'2'] && cnt[(int)'3'])) ans = min(ans, rig - lef + 1); cnt[(int)str[lef]] --; lef++; } printf("%d\n", ans == inf? 0 : ans); } return 0;}

本人水平有限,若有不足,请指正

转载地址:http://gafdi.baihongyu.com/

你可能感兴趣的文章
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>