Codeforces Round #272 (Div. 2)

2024-03-20 14:58
文章标签 codeforces round div 272

本文主要是介绍Codeforces Round #272 (Div. 2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

链接 : http://codeforces.com/contest/476

D题yy,ABC水



A. Dreamoon and Stairs
time limit per test
1 second
memory limit per test
256 megabytes

Dreamoon wants to climb up a stair of n steps. He can climb 1 or 2 steps at each move. Dreamoon wants the number of moves to be a multiple of an integerm.

What is the minimal number of steps making him climb to the top of the stairs that satisfies his condition?

Input

The single line contains two space separated integersn, m (0 < n ≤ 10000, 1 < m ≤ 10).

Output

Print a single integer — the minimal number of moves being a multiple ofm. If there is no way he can climb satisfying condition print - 1 instead.

Sample test(s)
Input
10 2
Output
6
Input
3 5
Output
-1
Note

For the first sample, Dreamoon could climb in 6 moves with following sequence of steps: {2, 2, 2, 2, 1, 1}.

For the second sample, there are only three valid sequence of steps {2, 1}, {1, 2}, {1, 1, 1} with 2, 2, and 3 steps respectively. All these numbers are not multiples of 5.


#include <cstdio>
int main()
{int n, m;scanf("%d %d", &n, &m);int temp = n / 2;if(n % 2) temp++;if(temp % m == 0) printf("%d\n", temp);else{temp = temp + m - temp % m;if(temp > n) printf("-1\n");else printf("%d\n", temp);}
}




B. Dreamoon and WiFi
time limit per test
1 second
memory limit per test
256 megabytes

Dreamoon is standing at the position 0 on a number line. Drazil is sending a list of commands through Wi-Fi to Dreamoon's smartphone and Dreamoon follows them.

Each command is one of the following two types:

  1. Go 1 unit towards the positive direction, denoted as'+'
  2. Go 1 unit towards the negative direction, denoted as'-'

But the Wi-Fi condition is so poor that Dreamoon's smartphone reports some of the commands can't be recognized and Dreamoon knows that some of them might even be wrong though successfully recognized. Dreamoon decides to follow every recognized command and toss a fair coin to decide those unrecognized ones (that means, he moves to the1 unit to the negative or positive direction with the same probability0.5).

You are given an original list of commands sent by Drazil and list received by Dreamoon. What is the probability that Dreamoon ends in the position originally supposed to be final by Drazil's commands?

Input

The first line contains a string s1 — the commands Drazil sends to Dreamoon, this string consists of only the characters in the set {'+','-'}.

The second line contains a string s2 — the commands Dreamoon's smartphone recognizes, this string consists of only the characters in the set {'+','-', '?'}.'?' denotes an unrecognized command.

Lengths of two strings are equal and do not exceed10.

Output

Output a single real number corresponding to the probability. The answer will be considered correct if its relative or absolute error doesn't exceed10 - 9.

Sample test(s)
Input
++-+-
+-+-+
Output
1.000000000000
Input
+-+-
+-??
Output
0.500000000000
Input
+++
??-
Output
0.000000000000
Note

For the first sample, both s1 and s2 will lead Dreamoon to finish at the same position + 1.

For the second sample, s1 will lead Dreamoon to finish at position 0, while there are four possibilites fors2: {"+-++","+-+-", "+--+","+---"} with ending position {+2, 0, 0, -2} respectively. So there are2 correct cases out of 4, so the probability of finishing at the correct position is0.5.

For the third sample, s2 could only lead us to finish at positions {+1, -1, -3}, so the probability to finish at the correct position + 3 is 0.


#include <cmath>
#include <cstdio>
#include <cstring>
char s1[15],s2[15];
int main()
{scanf("%s %s",s1,s2);int p1=0, m1=0;int p2=0, m2=0;int size=(int)strlen(s1);int wh=0;for(int i=0;i<size; i++){if(s1[i]=='+') ++p1;else ++m1;}for(int i=0;i<size; i++){if(s2[i]=='+') ++p2;else if(s2[i]=='-') ++m2;else ++wh;}if(wh == 0){if(p1 - m1 == p2 - m2)printf("1\n");elseprintf("0\n");return 0;}int all = 1;for(int i = 0;i < wh; i++)all *= 2;int pneed,mneed;int temp = p1 - m1 - p2 + m2;if(fabs(temp) > wh){printf("0\n");return 0;}pneed = (temp + wh) / 2;mneed = wh - pneed;int ans = 1;for(int i = 0; i < pneed; i++){ans *= wh;--wh;}for(int i=1; i<= pneed; i++)ans /= i;printf("%.12f\n",double(ans)/double(all));
}



C. Dreamoon and Sums
time limit per test
1.5 seconds
memory limit per test
256 megabytes

Dreamoon loves summing up something for no reason. One day he obtains two integersa and b occasionally. He wants to calculate the sum of allnice integers. Positive integer x is called nice if and, wherek is some integer number in range [1, a].

By we denote thequotient of integer division of x and y. By we denote theremainder of integer division of x and y. You can read more about these operations here:http://goo.gl/AcsXhT.

The answer may be large, so please print its remainder modulo1 000 000 007 (109 + 7). Can you compute it faster than Dreamoon?

Input

The single line of the input contains two integersa, b (1 ≤ a, b ≤ 107).

Output

Print a single integer representing the answer modulo1 000 000 007 (109 + 7).

Sample test(s)
Input
1 1
Output
0
Input
2 2
Output
8
Note

For the first sample, there are no nice integers because is always zero.

For the second sample, the set of nice integers is{3, 5}.



#include <cstdio>
#define ll long long
const int mod=1e9 + 7;
int main()
{ll a,b;scanf("%I64d %I64d", &a, &b);if(b == 1) printf("0\n");else{ll res = (b * (b - 1) / 2) % mod;ll sum = (a * (a + 1) / 2) % mod;ll ans = (a % mod * res % mod) % mod;ll temp = (sum % mod * res % mod) % mod;printf("%I64d\n", (ans % mod + (temp % mod * b % mod)) % mod);}
}



D. Dreamoon and Sets
time limit per test
1 second
memory limit per test
256 megabytes

Dreamoon likes to play with sets, integers and . is defined as the largest positive integer that divides botha and b.

Let S be a set of exactly four distinct integers greater than0. Define S to be of rankk if and only if for all pairs of distinct elementssi,sj fromS, .

Given k andn, Dreamoon wants to make up n sets of rank k using integers from1 to m such that no integer is used in two different sets (of course you can leave some integers without use). Calculate the minimumm that makes it possible and print one possible solution.

Input

The single line of the input contains two space separated integersn, k (1 ≤ n ≤ 10 000, 1 ≤ k ≤ 100).

Output

On the first line print a single integer — the minimal possiblem.

On each of the next n lines print four space separated integers representing thei-th set.

Neither the order of the sets nor the order of integers within a set is important. If there are multiple possible solutions with minimalm, print any one of them.

Sample test(s)
Input
1 1
Output
5
1 2 3 5
Input
2 2
Output
22
2 4 6 22
14 18 10 16
Note

For the first example it's easy to see that set {1, 2, 3, 4} isn't a valid set of rank 1 since .


#include <cstdio>
int main()
{int n, k;scanf("%d %d", &n, &k);int a = 1, b = 2, c = 3, d = 5;printf("%d\n", (d * k + 6 * k * (n- 1)));a *= k; b *= k; c *= k; d *= k;for(int i = 0; i < n; i++){printf("%d %d %d %d\n",a, b, c, d);a += 6 * k;b += 6 * k;c += 6 * k;d += 6 * k;}
}


这篇关于Codeforces Round #272 (Div. 2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829837

相关文章

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

Codeforces 482B 线段树

求是否存在这样的n个数; m次操作,每次操作就是三个数 l ,r,val          a[l] & a[l+1] &......&a[r] = val 就是区间l---r上的与的值为val 。 也就是意味着区间[L , R] 每个数要执行 | val 操作  最后判断  a[l] & a[l+1] &......&a[r] 是否= val import ja

CSS实现DIV三角形

本文内容收集来自网络 #triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;} #triangle-down {width: 0;height: 0;bor

创建一个大的DIV,里面的包含两个DIV是可以自由移动

创建一个大的DIV,里面的包含两个DIV是可以自由移动 <body>         <div style="position: relative; background:#DDF8CF;line-height: 50px"> <div style="text-align: center; width: 100%;padding-top: 0px;"><h3>定&nbsp;位&nbsp;

Codeforces Round 971 (Div. 4) (A~G1)

A、B题太简单,不做解释 C 对于 x y 两个方向,每一个方向至少需要 x / k 向上取整的步数,取最大值。 由于 x 方向先移动,假如 x 方向需要的步数多于 y 方向的步数,那么最后 y 方向的那一步就不需要了,答案减 1 代码 #include <iostream>#include <algorithm>#include <vector>#include <string>

CF#271 (Div. 2) D.(dp)

D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/474/problem/D We s

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There