2018年长沙理工大学第十三届程序设计竞赛

做完这次比赛,必须要写题解。真的是心态崩了。。第一个水题,一直wa。。。原来没有用gets,cin无法接收空格...记住这个教训吧!!!

A    LL

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

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

题目描述

 “LL是什么?这都不知道的话,别说自己是程序猿啊!”
  “longlong?”
  “。。。肯定是LoveLive啊!”
  qwb为了检验你是否是真正的程序猿,决定出道题考考你:现在程序会输入一行字符串,如果恰好是lovelive(不区分大小写)就输出yes,否则输出no。

输入描述:

输入有多组(组数不超过100),每组输入一行字符串(字符串长度不超过100)。

输出描述:

输出占一行,如果输入符合要求则输出yes,否则输出no。
示例1

输入

longlong
LoveLive
love live

输出

no
yes
no

注意,字符串里面有空格,就不能用cin了。。。还有就是长度大于8时也要考虑

代码:

#include
#define ll long long
using namespace std;

int main()
{
        char s[109];

        while(gets(s))
        {
            bool flag=1;
            int len=strlen(s);
            if(len!=8) flag=0;

            if(s[0]!='L'&&s[0]!='l')flag=0;
            if(s[1]!='O'&&s[1]!='o')flag=0;
            if(s[2]!='V'&&s[2]!='v')flag=0;
            if(s[3]!='E'&&s[3]!='e')flag=0;
            if(s[4]!='L'&&s[4]!='l')flag=0;
            if(s[5]!='I'&&s[5]!='i')flag=0;
            if(s[6]!='V'&&s[6]!='v')flag=0;
            if(s[7]!='E'&&s[7]!='e')flag=0;
        if(flag)
            cout<<"yes"<


B    奇怪的加法

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

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

题目描述

zhrt是数学大佬,但有一天一道奇怪的数学题把他难住了:题目要求计算两个十进制数相加后的结果,但在本题中是不需要进位的!
  现在zhrt弯下他的小蛮腰向你请教,你能帮帮他吗?

输入描述:

输入有多组(组数不超过1000),每组占一行,每行有2个正整数A和B。(A,B<=1e9)

输出描述:

每组输出占一行,输出题目中A和B相加的结果。
示例1

输入

123 321
999 1
99 11

输出

444
990
0

思路:

注意一个小技巧,可以先转换成数字,在进行相加。注意相加的时候是从后面往前面加。

代码:

#include 
using namespace std;
int main()
{
    int a[100],b[100];
    char s[100],ss[100];

    while(cin>>s>>ss)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        int l1=strlen(s);
        int l2=strlen(ss);
        int ll=max(l1,l2);
        for(int i=0;i

C - 取手机

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

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

题目描述

durong有a台iphonex和b台s8,并且放在一个保险箱里,durong现在一台一台从保险箱随机拿出这些手机,现在他想知道第k次拿出s8的概率是多少

输入描述:

第一行一个正整数T,表示数据组数。(1<=T<=10000)
接下来T行输入a,b,k
其中(1<=a,b,k<=1e9) k<=a+b;

输出描述:

第k次拿出s8的概率,保留三位小数
示例1

输入

1
1 1 1

输出

0.500

思路:

概率题目,注意找几个案例,可以发先b/(a+b)即为结果

代码:

#include 
using namespace std;
char mp[500][500];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        double a,b,k;
 
        cin>>a>>b>>k;
 
        double c=b/(a+b);
 
        printf("%.3lf\n",c);
 
    }
    return 0;
}

E    小木乃伊到我家

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

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

题目描述

  AA的欧尼酱qwb是个考古学家,有一天qwb发现了只白白圆圆小小的木乃伊,它是个爱哭鬼却很努力。qwb想把这么可爱的小木乃伊送给
AA,于是便找上了快递姐姐,这下可让快递姐姐犯愁了,因为去往AA家的路实在太难走了(甚至有可能没有路能走到AA家),快递姐姐
找上聪明的ACMer,想请你帮忙找出最快到达AA家的路,你行吗?

输入描述:

第一行输入两个整数n和m(2<=n<=m<=200000),分别表示有n座城市和m条路,城市编号为1~n(快递姐姐所在城市为1,AA所在城市为n)。
接下来m行,每行输入3个整数u,v,w(u,v<=n,w<=100000),分别表示城市u和城市v之间有一条长为w的路。

输出描述:

输出结果占一行,输出快递姐姐到达AA家最短需要走多远的路,如果没有路能走到AA家,则输出“qwb baka”(不用输出双引号)。
示例1

输入

4 4
1 2 1
2 3 2
3 4 3
2 3 1

输出

5

思路:最短路模板,spfa算法

代码:

#include 
#define maxn 210000
#define INF 1e9
using namespace std;

struct Edge{
    int from,to,dist;
    Edge(int f,int t,int d):from(f),to(t),dist(d){};

};

struct BellmanFord{
   int n,m;  ///n点m条边
   vector edges;
   vector G[maxn];
   bool inq[maxn];
   int d[maxn];///s到各点的距离
   int p[maxn];///最短路中的上一条弧
   int cnt[maxn];///进队次数

   void init(int n)
   {
       this->n=n;
       for(int i=1;i<=n;i++) G[i].clear();  //1开始
       edges.clear();
   }

   void AddEdge(int from,int to,int dist)
   {
       edges.push_back(Edge(from,to,dist));
       m=edges.size();
       G[from].push_back(m-1);
   }

   void spfa(int s)
   {
       queue Q;
       memset(inq,0,sizeof(inq));
       memset(cnt,0,sizeof(cnt));

       for(int i=1;i<=n;i++) d[i]= i ==s?0:INF;  //1开始
       Q.push(s);

       while(!Q.empty())
       {
           int u=Q.front();
           Q.pop();
           inq[u] = false;
           for(int i=0;i<(int ) G[u].size();i++ )
           {
               Edge &e = edges[G[u][i]];
               if(d[e.to] > d[u] +e.dist )
               {
                   d[e.to] = d[u]+e.dist;
                   p[e.to] = G[u][i];
                   if(!inq[e.to])
                   {
                       Q.push(e.to);
                       inq[e.to] = true;
                   }
               }
           }
       }
   }
}BF;

int main()
{
    int n,m;
    cin>>n>>m;
    BF.init(n);
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        BF.AddEdge(u,v,w);
        BF.AddEdge(v,u,w);
    }
    BF.spfa(1);
    if(BF.d[n]==INF)
    {
        cout<<"qwb baka"<
-------------------------------------!未完待续--------------------------------------



你可能感兴趣的:(2017年省赛赛前训练赛)