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

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

LL

题目描述

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

输入描述:

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

输出描述:

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

输入

longlong
LoveLive
love live

输出

no
yes
no

 1 #include <iostream>
 2 #include <string.h>
 3 
 4 using namespace std;
 5 char s[105];
 6 int main(){
 7     char ss[10]="lovelive";
 8     while(gets(s)){
 9         int slen = strlen(s);
10         
11         for(int i=0;i<slen;i++){
12             if(s[i]<='Z'&&s[i]>='A'){
13                 s[i] = tolower(s[i]);
14             }
15         }
16         if(strcmp(s,ss)){
17             cout<<"no"<<endl;
18         }else{
19             cout<<"yes"<<endl;
20         }
21     }
22     return 0;
23 }

 

 

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

奇怪的加法

题目描述

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

输入描述:

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

输出描述:

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

输入

123 321
999 1
99 11

输出

444
990
0


 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 string a,b;
 4 int main(){
 5     while(cin>>a>>b){
 6         string ss;
 7         reverse(a.begin(),a.end());
 8         reverse(b.begin(),b.end());
 9         int al = a.length();
10         int bl = b.length();
11         for(int i=0;i<min(al,bl);i++){
12             int ax = a[i]-'0';
13             int bx = b[i]-'0';
14             ax = (ax+bx)%10;
15             ss+=ax+'0';
16         }
17         if(al>bl){
18             for(int i=bl;i<al;i++){
19                 ss+=a[i];
20             }
21         }else if(bl>al){
22             for(int i=al;i<bl;i++){
23                 ss+=b[i];
24             }
25         }
26         bool prime = true;
27         string as;
28         for(int i=max(al,bl)-1;i>=1;i--){
29             if(ss[i]=='0'&&prime){
30                 continue;
31             }else{
32                 prime =false;
33                 as+=ss[i];
34             }
35         }
36         as+=ss[0];
37         cout<<as<<endl;
38     }
39     return 0;
40 }

 

 

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

取手机

题目描述

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

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 void solve(float a,float b){
 5     printf("%.3f\n",(b/(a+b)));
 6 }
 7 
 8 int main(){
 9     int t;
10     cin>>t;
11     while(t--){
12         float n,m,k;
13         cin>>n>>m>>k;
14         solve(n,m);
15     }
16 
17     return 0;
18 }

 

 

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

小木乃伊到我家

题目描述

  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

 1 #include <iostream>
 2 #include <queue>
 3 #include <cstring>
 4 #include <algorithm>
 5 #define N 200005
 6 #define NN 200005
 7 #define inf 0x3f3f3f3f
 8 #define mem(a,b) memset(a,b,sizeof(a))
 9 using namespace std;
10 queue<int> q;
11 struct Edge{
12     int to;
13     int next;
14     int val;
15 }Edge[N];
16 int M;
17 int dist[NN];
18 int vis[NN];
19 int head[NN];
20 void add(int from,int to,int val){
21     Edge[M].to = to;
22     Edge[M].next = head[from];
23     Edge[M].val = val;
24     head[from] = M++;
25 }
26 
27 void SPFA(int s){
28     dist[s] = 0;
29     q.push(s);
30     vis[s] = 1;
31     while(!q.empty()){
32         int temp = q.front();
33         q.pop();
34         for(int i=head[temp];i!=-1;i=Edge[i].next){
35             int node = Edge[i].to;
36             if(dist[node]>dist[temp]+Edge[i].val){
37                 dist[node] = dist[temp]+Edge[i].val;
38                 if(!vis[node]){
39                     q.push(node);
40                     vis[node] = 1;
41                 }
42             }
43         }
44         vis[temp] = 0;
45     }
46 }
47 
48 int n,m;
49 int main(){
50     std::ios::sync_with_stdio(false);
51     std::cin.tie(0);
52     mem(head,-1);
53     mem(vis,0);
54     mem(dist,inf);
55     cin>>n>>m;
56     for(int i=1;i<=m;i++){
57         int to,from,val;
58         cin>>from>>to>>val;
59         add(from,to,val);
60     }
61     SPFA(1);
62     cout<<dist[n]<<endl;
63     return 0;
64 }

 

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

数学考试

题目描述

今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完,
他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间,
即[L,L+1,L+2,....,L+k-1],[R,R+1,R+2,...,R+k-1](R >= L+k)。

输入描述:

第一行一个整数T(T<=10),代表有T组数据
接下来一行两个整数n,k,(1<=n<=200,000),(1<=k,2k <= n)
接下来一行n个整数a1,a2,...,an,(-100,000<=ai<=100,000)

输出描述:

输出一个整数,qwb能获得的最大分数
示例1

输入

2
6 3
1 1 1 1 1 1
8 2
-1 0 2 -1 -1 2 3 -1

输出

6
7

 

 1 #include <bits/stdc++.h>
 2 #define N 200010
 3 #define ll long long int
 4 #define mem(a) memset(a,0,sizeof(a))
 5 using namespace std;
 6 
 7 int t;
 8 ll n,m;
 9 ll vis[N],ans[N],aa[N],ab[N];
10 int main(){
11     cin>>t;
12     while(t--){
13         cin>>n>>m;
14         mem(vis);
15         mem(ans);
16         mem(aa);
17         mem(ab);
18         ll k=1;
19         for(ll i=0;i<n;i++){
20             cin>>ans[i];
21         }
22         for(ll i=0;i<m;i++){
23             vis[0]+=ans[i];
24         }
25         for(ll i=m;i<n;i++){
26             vis[k]=vis[k-1]-ans[i-m]+ans[i];
27             k++;
28         }
29         aa[0]=vis[0];
30         for(ll i=1;i<k;i++){
31             aa[i]=max(aa[i-1],vis[i]);
32         }
33         ab[k-1]=vis[k-1];
34         for(ll i=k-2;i>=0;i--){
35             ab[i]=max(ab[i+1],vis[i]);
36         }
37         ll sum=-9999999999999;
38         for(ll i=0;i<k-m;i++){
39             sum=max(sum,aa[i]+ab[i+m]);
40         }
41         cout<<sum<<endl;
42     }
43     return 0;
44 }

 

 

 

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

仓鼠养殖计划

题目描述

集训队暑训的时候,是睡在机房的,有几个小伙子不甘寂寞,带了仓鼠来机房。有的还不止带了一只!
为此,贴心的集训队刘队长买了一大一小两种放仓鼠笼子的架子,大的可以放两个仓鼠笼 小的只能放一个。
要注意的是仓鼠是领地动物,一般来讲 仓鼠笼与仓鼠笼之间是不能贴在一起的,
但同一个人带来的仓鼠的仓鼠笼可以被放在一起(既两个仓鼠笼如果属于同一个人,那么这两个仓鼠笼就可以被放在同一个大架子上)
现在告诉你现有的两种架子的数量和多少人带了仓鼠以及每个人带的仓鼠的数量,问你是否能将这些仓鼠放下。

输入描述:

第一行为一个数T 表示测试样例组数

对于每组测试数据

第1行输入a,b,n; 分别为小架子的数量,大架子的数量,带了仓鼠的人数

第2行有n个数字P
1
-P
n
,分别表示每个人带的仓鼠的数量

输出描述:

如果放得下 则输出"Yes" 否则输出"No"
示例1

输入

1
1 2 4
1 1 1 1

输出

No

备注:

1<=n<=50 1<=a,b<=100  1<=Pi<=20

 

 

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int n;
 6 int a,b,m;
 7 int main(){
 8     cin>>n;
 9     while(n--){
10         int vis[55];
11         cin>>a>>b>>m;
12         for(int i=0;i<m;i++)
13             cin>>vis[i];
14         for(int i=0;i<m;i++){
15             int an = vis[i]/2;
16             if(b>=an){
17                 b-=an;
18                 vis[i]%=2;
19             }else{
20                 vis[i]-=b*2;
21                 b=0;
22                 break;
23             }
24         }
25         bool prime = true;
26         a=a+b;
27         for(int i=0;i<m;i++){
28             if(a>=vis[i]){
29                 a-=vis[i];
30                 vis[i]=0;
31             }else{
32                 prime = false;
33                 break;
34             }
35         }
36         if(prime){
37             cout<<"Yes"<<endl;
38         }else{
39             cout<<"No"<<endl;
40         }
41     }
42     return 0;
43 }

 

posted @ 2018-04-15 20:44  #忘乎所以#  阅读(488)  评论(1编辑  收藏  举报