西安电子科技大学第16届程序设计竞赛网络同步赛

A.GRE

链接:https://www.nowcoder.com/acm/contest/107/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

 不愤不启不悱不发,王萌萌为了能够成功上研,开始刻苦背GRE单词,但是由于她过于刻苦,在背会英语单词的同时,把中文读音忘了。于是王萌萌又开始复习起中文发音,她先从数字开始复习起。。。
题目很简单,王萌萌给出在[0, 10]范围内的整数的英文单词,你教她中文发音。


输入描述:

第一行输入一个T,表示王萌萌询问的单词。(T <= 20)
后面T行每行一个英文单词,题目保证英文单词是[0, 10]数字所表示的单词且单词书写无误,单词用小写形式给出。

输出描述:

对于每一个输入的单词,输出它的中文读音,请用小写形式给出。
示例1

输入

5
zero
one
one
four
eight

输出

ling
yi
yi
si
ba

签到题目

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
    string s;
    int n;
    cin>>n;
    while(n--)
    {
        cin>>s;
        if(s=="zero")
            cout<<"ling"<<endl;
        else if(s=="one")
            cout<<"yi"<<endl;
        else if(s=="two")
            cout<<"er"<<endl;
        else if(s=="three")
            cout<<"san"<<endl;
        else if(s=="four")
            cout<<"si"<<endl;
        else if(s=="five")
            cout<<"wu"<<endl;
        else if(s=="six")
            cout<<"liu"<<endl;
        else if(s=="seven")
            cout<<"qi"<<endl;
        else if(s=="eight")
            cout<<"ba"<<endl;
        else if(s=="nine")
            cout<<"jiu"<<endl;
        else if(s=="ten")
            cout<<"shi"<<endl;
    }
    return 0;
}

B    Words Game

链接:https://www.nowcoder.com/acm/contest/107/B
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

有一款英语练习游戏是这样的,每次会给出一些字母,然后需要你从中拼出一个最长的英文单词。
虽然williamchen的英语非常差,但是他现在搞到了一本英语词典,他只需要在词典里找出一个最长的符合条件的字母即可。
现在你需要写一个程序来帮助他完成这个任务。

输入描述:

包含多组测试数据,每组数据开始一行包含不超过20个字母,表示游戏给出的字母。
接下来是一行一个数字N(1 <= N <= 1000)
接下来N行,每行一个字符串表示词典中的单词,单词长度不会超过10。

输出描述:

每组数据输出一行,表示最长可能拼出的单词长度,如果一个单词都拼不出,那就输出0。
示例1

输入

masterblodpo
7
boogie
magnolia
punch
blood
master
inherent
phantom
ablderrivala
5
arrival
blade
runner
incendies
sicario

输出

6
7

思路:

暴力就行,一个一个的找

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[30];
char w[20];
int main()
{
    int n;
    int maxx;
    while(cin>>s)
    {
        maxx=0;
        int l1=strlen(s);
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>w;
            int l2=strlen(w);
            int j=0,k=0;
            int flag=0;
            for(j=0;j<l2;j++)
            {
                for(; k<l1; k++)
                {
                    if(w[j]==s[k])
                    {
                        if(j==l2-1)
                        flag=1;
                        k++;
                        break;
                    }
                }
            }
            if(flag==1)
            {
                maxx=max(maxx,l2);
            }
        }
        cout<<maxx<<endl;
    }
    return 0;
}

C    Arch0n's interesting game

链接:https://www.nowcoder.com/acm/contest/107/C
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

Arch0n老师is a rich man, 他靠自己的才华和智商年纪轻轻就赚了不少钱。为了训练自己的智商,他经常玩一些interesting的游戏来训练自己的智商,比如什么RGB游戏,还有和妹子一块玩Don't Starve。言归正传,今天他又发明了一个新的interesting game。

Ar老师手上有一堆卡牌,然后卡牌上写了一个数字Ai(正整数),当前他有n张牌,然后他总是随机取出两张来,然后他一眼就能看出这两牌中哪一张小(相同就取相同的,这操作好像对于Ar老师来说太简单了),作为这两张牌的有效分值,然后呢他陷入了沉思,对于n张牌取两张牌显然有确定的组合可能性,有n*(n-1)/2对组合,然后他想知道所有这些组合中第k大的分值是多少。

输入描述:

输入一个t表示数据组数;(0<t<=10)
接下来一行是n,k,表示n张牌和最后第k大的分值;(1<n<2500,保证0<k<=n*(n-1)/2)
接下来一行是n个值ai,表示第i张牌上的数字(0 < ai <= 10000000)。

输出描述:

每组数据输出一行,即第k大的分值为多少。
示例1

输入

2
3 2
1 2 3
3 1
4 2 1

输出

1
2

思路:

其实就是排序之后从最大的依次往后找,首先最大的一定不存在,第二大的包含一个即第二大和第一大,第三大的包含2个,即第二大和第一大,。。。。也就是说相当于一个等差数列。详细见代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int T, N, K;
    cin>>T;
    int a[100000];
    while(T--)
    {
        cin>>N>>K;
        for(int i=1; i<=N; i++)
        {
            cin>>a[i];
        }
        sort(a+1, a+1+N);
        int x=1;
        int i;
        for(i=N-1; i>=1; i--)
        {
            if(K<=x)
            {
                break;
            }
            K-=x;
            x++;
        }
        cout<<a[i]<<endl;
    }
    return 0;
}
D    另一个另一个简单游戏

链接:https://www.nowcoder.com/acm/contest/107/D
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

现在有 n 个数,每次随机取出两个数 x,y ,然后加入一个数为 (x+y)/2 ,问最后剩下的那个数的期望是多少?

输入描述:

有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T≤20)。
接下来为T组数据。
每组测试数据分2行:
第一行为n,表示有n个数(1≤n≤100)
接下来的一行有n个正整数ai,表示初始的n个数(1≤ai≤10000,1≤i≤n)。

输出描述:

对于每组数据,在一行上输出最后剩下数的期望值的整数部分。
示例1

输入

2
3
1 1 1
2
2 3

输出

1
2

思路:

其实就是·n个数的和除以n的关系

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define M 10005
int n,a[M];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        int sum=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        printf("%d\n",sum/n);
    }
    return 0;
}
G    小国的复仇

链接:https://www.nowcoder.com/acm/contest/107/G
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

众所周知,汀老师是XDUACM实验室最优秀的人,无论是学习还是打游戏。今天他突然想到一个好玩的游戏。规则是这样的,在游戏中他要得到n个小国,初始的时候小国和小杰各有1个。经过了很久的修炼,汀老师学会了两种魔法,他每次可以动用自己的智慧来使用魔法。

第一个魔法:(小杰变小国)可以将自己的智慧复制和当前小杰一样数量的小国出来;

第二个魔法:(小国大爆发)可以将当前的小杰变成和小国的数量一样,然后小国的数量加倍!

因为汀老师的智力是无限多的,他不关心花掉的智力大小。但是好学的汀老师想尽快得到n个小国,使得能有更多的时间去读paper和打比赛。他想问问你,最少需要使用多少次魔法可以得到n个小国。

得到了n个小国后,汀老师去学习,但是小国们基因突变在电脑里越来越多!他们来组织汀老师学习,现在告诉汀老师我要得到更多的同伴!

输入描述:

多组数据,第一行一个正整数T(T<=100000)表示数据组数。
接下来T行,每行一个正整数n(n<=10^6)。

输出描述:

对于每组数据输出一个整数,表示得到n个小国汀老师最少需要使用多少次膜法。
示例1

输入

2
1
3

输出

0
2

思路:

规律题目,当n为素数的时候就是n-1,当n不为素数时就是他的两个因子的方法的和,就是这么一个规律

代码:

#include<bits/stdc++.h>
using namespace std;
int t,n;
long long ans[1000005];
int main()
{
    ans[1]=0;
    ans[2]=1;
    for(int i=2;i<=1000000;i++)
    {
        if(ans[i]==0)
        {
            ans[i]=i-1;
        }
        for(int j=2;j<=i;j++)
        {
            if(i*j>1000000) break;
            if(ans[i*j]==0)
            ans[i*j]=ans[i]+ans[j];
        }
    }
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        cout<<ans[n]<<endl;
    }
    return 0;
}



猜你喜欢

转载自blog.csdn.net/sinat_37668729/article/details/80034136