codeforces Educational Codeforces Round 54 (Rated for Div. 2) 题解

。。。。此次Div2就做了两个题目,第一个题目wa了4次,22分钟出的,第二道题目一遍过,18分钟,然后看到c题感觉样例好玄学,就捣鼓浮点数去了,没想到是二元一次方程求解。。。还是太蠢了。

A:

You are given a string s consisting of n lowercase Latin letters.

You have to remove at most one (i.e. zero or one) character of this string in such a way that the string you obtain will be lexicographically smallest among all strings that can be obtained using this operation.

String s=s1s2…sn

is lexicographically smaller than string t=t1t2…tm if n<m and s1=t1,s2=t2,…,sn=tn or there exists a number p such that p≤min(n,m) and s1=t1,s2=t2,…,sp−1=tp−1 and sp<tp

.

For example, "aaa" is smaller than "aaaa", "abb" is smaller than "abc", "pqr" is smaller than "z".

Input

The first line of the input contains one integer n

(2≤n≤2⋅105) — the length of s

.

The second line of the input contains exactly n

lowercase Latin letters — the string s

.

Output

Print one string — the smallest possible lexicographically string that can be obtained by removing at most one character from the string s

.

Examples

Input

Copy

3
aaa

Output

Copy

aa

Input

Copy

5
abcda

Output

Copy

abca

Note

In the first example you can remove any character of s

to obtain the string "aa".

In the second example "abca" < "abcd" < "abcda" < "abda" < "acda" < "bcda".

 找第i项比第i+1项大的。删除的就是那个字符,如果没有,则删除最后一位。

代码如下:
 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=2*1e5+5;
int n;
char a[maxn];
int main()
{
    scanf("%d",&n);
    int loc;
    char Max;
    scanf("%s",a);
    int flag=0;
    for (int i=0;i<n-1;i++)
    {
        if(a[i]>a[i+1])
        {
            flag=1;
            loc=i;
            break;
        }
    }
    if(!flag)
        loc=n-1;
    for (int i=0;i<n;i++)
        if(i!=loc)
        printf("%c",a[i]);
    printf("\n");
    return 0;
}

 

B. Divisor Subtraction

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

You are given an integer number n

. The following algorithm is applied to it:

  1. if n=0, then end algorithm;
  2. find the smallest prime divisor d of n;
  3. subtract d from n and go to step 1
  • Determine the number of subtrations the algorithm will make.

    Input

    The only line contains a single integer n

    (2≤n≤1010

    ).

    Output

    Print a single integer — the number of subtractions the algorithm will make.

    Examples

    Input

    Copy

    5
    
    Output

    Copy

    1
    
    Input

    Copy

    4
    
    Output

    Copy

    2
    

    Note

    In the first example 5

    is the smallest prime divisor, thus it gets subtracted right away to make a 0

    .

    In the second example 2

    is the smallest prime divisor at both steps.

     

当为偶数时,直接/2即可,当为奇数,求出枚举求出最小素因子,然后减去这个素因子,必定为偶数,然后转化为偶数求解的方式。

代码如下:
 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
typedef long long ll;
ll n;
int is_su (ll x,ll& yin)
{
    ll m=(ll)sqrt(x);
    for (ll i=2;i<=m;i++)
    {
        if(x%i==0)
        {
            yin=i;
            return 0;
        }
    }
    return 1;
}
int main()
{
    scanf("%lld",&n);
    if(n%2==0)
    {
        printf("%lld\n",n/2);
    }
    else
    {
        ll t;
        if(is_su(n,t))
        {
            printf("1\n");
        }
        else
        {
            printf("%lld\n",(n-t)/2+1);
        }
    }
    return 0;
}

 

C. Meme Problem

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Try guessing the statement from this picture:

You are given a non-negative integer d

. You have to find two non-negative real numbers a and b such that a+b=d and a⋅b=d

.

Input

The first line contains t

(1≤t≤103

) — the number of test cases.

Each test case contains one integer d

(0≤d≤103)

.

Output

For each test print one line.

If there is an answer for the i

-th test, print "Y", and then the numbers a and b

.

If there is no answer for the i

-th test, print "N".

Your answer will be considered correct if |(a+b)−a⋅b|≤10−6

and |(a+b)−d|≤10−6

.

Example

Input

Copy

7
69
0
1
4
5
999
1000

Output

Copy

Y 67.985071301 1.014928699
Y 0.000000000 0.000000000
N
Y 2.000000000 2.000000000
Y 3.618033989 1.381966011
Y 997.998996990 1.001003010
Y 998.998997995 1.001002005

 

 这题目想了50分钟结果想歪了。。。

就是个解二元一次方程组的问题。

a+b=d; a*b=d;

则a*(d-a)=d;

则a*a-ad+d=0,

用求根公式求出一个解,然后d减去那个解就是b的答案。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
using namespace std;
int t;
double d;
int main()
{
    scanf("%d",&t);
    while (t--)
    {
        scanf("%lf",&d);
        double m;
        m=d*d-4*d;
        if(m<0)
        {
            printf("N\n");
        }
        else
        {
            double x1,x2;
            m=sqrt(m);
            x1=(d+m)/2;
            x2=d-x1;
            printf("Y %.9lf %.9lf\n",x1,x2);
        }
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值