省赛选拔第二场

H - 水题

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit

 Status Practice FZU 2182

Description

胖哥自从当上公务员,赢取白富美,走向人生巅峰后,已经懒散到不想出题了,不仅如此,他连题目都懒得看了,现在他只会根据题目第一个单词的长度判定这个题目的难度

如果题目的第一个单词太长(长度大于3),他会说这题太难,不可能想的出来; 如果题目的第一个单词太短(长度不大于3),他会说这题太简单,懒得去想

现在给定一个题目,L想知道胖哥对于这道题会作出什么反应

Input

首先是一个正整数cas,表示有cas组输入,cas<=100

对于每组输入,会给出一行,每行表示一个题目,每个题目只会由大写字母,小写字母或者空格构成,每行的第一个字符一定不会是空格,多个空格可能连续出现,每行最多200个字符

Output

对于每个题目,如果胖哥觉得这题太难,输出"Too hard!",否则输出"Too easy!"

Sample Input

12 If the day is done If birds sing no more If the wind has fiagged tired Then draw the veil of darkness thick upon me Even as thou hast wrapt the earth with The coverlet of sleep and tenderly closed The petals of the drooping lotus at dusk From the travere Whose sack of provisions is empty before the voyage is ended Whose garment is torn and dustladen Whose strength is exhausted remove shame and poverty And renew his life like a flower under The cover of thy kindly night

Sample Output

Too easy! Too easy! Too easy! Too hard! Too hard! Too easy! Too hard! Too hard! Too hard! Too hard! Too easy! Too easy!

题目意思很简单 就是处理的时候注意getchar就行

​#include<iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

using namespace std;

char s[100000];

int main()

{

    int t;

    scanf("%d",&t);

    getchar();

    while(t--)

    {

        getchar();

        gets(s);

        int len=strlen(s);

        int cnt=1;

        for(int i=0;i<len;i++)

        {

            if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')

            {

               cnt++;

            }

            else

                break;

        }

//        cout<<cnt<<"**"<<endl;

        if(cnt>3)

            printf("Too hard!\n");

        else

            printf("Too easy!\n");

    }

}

I - Pangram

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Submit

 Status Practice CodeForces 520A

Description

A word or a sentence in some language is called a pangram if all the characters of the alphabet of this language appear in it at least once. Pangrams are often used to demonstrate fonts in printing or test the output devices.

You are given a string consisting of lowercase and uppercase Latin letters. Check whether this string is a pangram. We say that the string contains a letter of the Latin alphabet if this letter occurs in the string in uppercase or lowercase.

Input

The first line contains a single integer n (1 ≤ n ≤ 100) — the number of characters in the string.

The second line contains the string. The string consists only of uppercase and lowercase Latin letters.

Output

Output "YES", if the string is a pangram and "NO" otherwise.

Sample Input

Input

12toosmallword

Output

NO

Input

35TheQuickBrownFoxJumpsOverTheLazyDog

Output

YES

也是水题

题意是一个句子中是否出现了26个字母 大小写一样

#include<iostream>

#include<stdio.h>

#include<algorithm>

#include<string.h>

int a[27];

char s[105];

int main()

{

    int n;

    while(~scanf("%d",&n))

    {

        memset(a,0,sizeof(a));

        scanf("%s",s);

        for(int i=0;i<n;i++)

        {

            if(s[i]>='a'&s[i]<='z')

            a[s[i]-'a']++;

            else if(s[i]>='A'&&s[i]<='Z')

            a[s[i]-'A']++;

        }

        int f=1;

        for(int i=0;i<26;i++)

        if(!a[i])

        {

            f=0;

            break;

        }

        if(f)

        printf("YES\n");

        else

        printf("NO\n");

    }

}

​J - Two Buttons

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Submit

 Status Practice CodeForces 520B

Description

Vasya has found a strange device. On the front panel of a device there are: a red button, a blue button and a display showing some positive integer. After clicking the red button, device multiplies the displayed number by two. After clicking the blue button, device subtracts one from the number on the display. If at some point the number stops being positive, the device breaks down. The display can show arbitrarily large numbers. Initially, the display shows number n.

Bob wants to get number m on the display. What minimum number of clicks he has to make in order to achieve this result?

Input

The first and the only line of the input contains two distinct integers n and m (1 ≤ n, m ≤ 104), separated by a space .

Output

Print a single number — the minimum number of times one needs to push the button required to get the number m out of number n.

Sample Input

Input

4 6

Output

2

Input

10 1

Output

9

Hint

In the first example you need to push the blue button once, and then push the red button once.

In the second example, doubling the number is unnecessary, so we need to push the blue button nine times.

题意:

这是我做出的第三题 想复杂了  写了一个半小时 估计正好是昨天写了一天的spfa慢脑子就spfa

当我做出来的时候发现 一堆人都ac了T T

小妹直接用数学给过了 哭T T

有一个装置 有两个按钮 

red *2 blue -1

问最少几步能把n变成m

思路 把点变成图 red就是 (i,i*2) 这条边 blue 就是 (i,i-1)

用最短路spfa 直接暴力搜​​

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<queue>

using namespace std;

const int M=2e4+20;

const int INF=0x3f3f3f3f;

struct Edge

{

    int to,next;

}e[M<<4];

int d[M],vis[M],head[M] ;

int n,m;

int cnt=0;

void addEdge(int u,int v)

{

    e[cnt].to=v;

    e[cnt].next=head[u];

    head[u]=cnt++;

}

int Spfa()

{

    memset(d,INF,sizeof(d));

    memset(vis,0,sizeof(vis));

    d[n]=0;

    queue<int>tp;

    tp.push(n);

    vis[n]=1;

    while(!tp.empty())

    {

        int top=tp.front();tp.pop();

        for(int i=head[top];i!=-1;i=e[i].next)

        {

            int v=e[i].to;

            if(d[v]>d[top]+1)

            {

                d[v]=d[top]+1;

                if(!vis[v])

                {

                    vis[v]=1;

                    tp.push(v);

                }

            }

        }

    }

}

int main()

{

        scanf("%d%d",&n,&m);

        if(n>m)

        {

           printf("%d",n-m);

        }

        else{

                memset(head,-1,sizeof(head));

        for(int i=1;i<=10000;i++)

        {

            if(2*i<M) addEdge(i,2*i);

            if(i-1>=0) addEdge(i,i-1);

        }

        Spfa();

        printf("%d\n",d[m]);

        }

}

数学方法 算法弱爆:

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

#include<math.h>

using namespace std;

int main()

{

    int n,m;

    scanf("%d%d",&n,&m);

    int cnt=0;

    if(n>m)

    {

        printf("%d\n",n-m);

    }

    else

    {

        while(n!=m)

        {

            if(m&1)

            {

                m+=1;

                cnt++;

            }

            m/=2;

            cnt++;

            if(n>m)

            {

                cnt=cnt+n-m;

                break;

            }

        }

        printf("%d\n",cnt);

    }

}

​C - ytaaa

Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit

 Status Practice FZU 2177

Description

Ytaaa作为一名特工执行了无数困难的任务,这一次ytaaa收到命令,需要炸毁敌人的一个工厂,为此ytaaa需要制造一批炸弹以供使用。 Ytaaa使用的这种新型炸弹由若干个炸药组成,每个炸药都有它的威力值,而炸弹的威力值为组成这个炸弹的所有炸药的最大威力差的平方,即(max-min)^2,假设一个炸弹有5个炸药组成,威力分别为5 9 8 2 1,那么它的威力为(9-1)^2=64。现在在炸弹的制造流水线上已经有一行n个炸药,由于时间紧迫,ytaaa并没有时间改变它们的顺序,只能确定他们的分组。作为ytaaa的首席顾问,请你帮助ytaaa确定炸药的分组,使制造出的炸弹拥有最大的威力和。

Input

输入由多组数据组成。第一行为一个正整数n(n<=1000),第二行为n个数,第i个数a[i]为第i个炸药的威力值(0<=a[i]<=1000)。

Output

对于给定的输入,输出一行一个数,为所有炸弹的最大威力和。

Sample Input

6 5 9 8 2 1 6

Sample Output

77

题意:让后就是这一题 简单的区间dp

我一个小时之前就写出来了 最大最小值初始化弄成了一样 前前后后弄了一个小时 最后5min ac

#include<iostream>

#include<stdio.h>

#include<string.h>

#include<algorithm>

using namespace std;

const int INF=0x3f3f3f;

int a[1005];

int dp[1005];

int main()

{

    int n;

    while(~scanf("%d",&n))

    {

        for(int i=1;i<=n;i++)

        scanf("%d", &a[i]);

        for(int i=1; i<=n; i++)

        {

            dp[i]=dp[0] = 0;

            int maxn =-INF, minn = INF;

            for(int j=i; j>=1; j--)

            {

                maxn=max(maxn, a[j]);

                minn=min(minn, a[j]);

                dp[i]=max(dp[i], dp[j-1]+(maxn-minn)*(maxn-minn));

            }

        }

        printf("%d\n",dp[n]);

    }

}

 

 

#include<iostream>

#include<stdio.h>

​#include

​<string.h>

​#include<algorithm>

​using namespace std;char s[100000];int main(){

    int t;

    scanf("%d",&t);

    getchar();

    while(t--)

    {

        getchar();

        gets(s);

        int len=strlen(s);

        int cnt=1;

        for(int i=0;i<len;i++)

        {

            if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')

            {

               cnt++;

            }

            else

                break;

        }//        cout<<cnt<<"**"<<endl;

        if(cnt>3)

            printf("Too hard!\n");

        else

            printf("Too easy!\n");

    }}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char s[100000];int main(){

    int t;

    scanf("%d",&t);

    getchar();

    while(t--)

    {

        getchar();

        gets(s);

        int len=strlen(s);

        int cnt=1;

        for(int i=0;i<len;i++)

        {

            if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')

            {

               cnt++;

            }

            else

                break;

        }//        cout<<cnt<<"**"<<endl;

        if(cnt>3)

            printf("Too hard!\n");

        else

            printf("Too easy!\n");

    }}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char s[100000];int main(){

    int t;

    scanf("%d",&t);

    getchar();

    while(t--)

    {

        getchar();

        gets(s);

        int len=strlen(s);

        int cnt=1;

        for(int i=0;i<len;i++)

        {

            if(s[i]>='A'&&s[i]<='Z'||s[i]>='a'&&s[i]<='z')

            {

               cnt++;

            }

            else

                break;

        }//        cout<<cnt<<"**"<<endl;

        if(cnt>3)

            printf("Too hard!\n");

        else

            printf("Too easy!\n");

    }}

​​

 

你可能感兴趣的:(算法)