陕西师范大学第七届程序设计竞赛网络同步赛

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

WWX的520
时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld

题目描述

520,因为谐音为我爱你,所以也被称之为表白日。

这一天,人们借机把藏在心底的洪荒之力通过表白、撒娇、传情、送礼、结婚等形式释放出来,商家也会趁势开展各类优惠促销活动,掀起一波或浪漫或虐狗的节日热浪。

这一天,也是送男朋友礼物、送女朋友礼物、送自己礼物、送亲朋好友礼物的好时机。

在520即将到来之际,wwx准备为她的女朋友购买一批礼物。于是他列出了一份礼物清单,但由于预算有限,必须删掉一种礼物。经过深思熟虑,他决定删掉价格第k高的礼物,你能帮帮他,找出是哪一种礼物吗?

输入描述:

第一行是一个整数T(1<=T<=80),表示有T组数据.
对于每一组数据,首先一行输入N(3<=N<=1000),接下来的N行每行输入一个字符串和一个整数,以空格间隔,分别作为每种礼物的名字和价格。
接下来一行输入k,表示要删去第k(1<=<=N)高的礼物
礼物的名字的长度不超过30,礼物的价格不超过1000,且均为整数。

输出描述:

对于每组输入数据,依次输出它的组号和要删去的礼物的名字和价格,以空格间隔。
若两种商品的价格相同,则比较礼物名字的字典序大小。即:两种礼物的价格相同时,字典序大者若为第k高,字典序小者则为第k+1高。
示例1

输入

2
3
Apple 18
Book 30
Milk 8000
3
4
Apple 300
Bananas  200
Bracelet 200
Candy 200
3

输出

#1: Apple 18
#2: Bracelet 200

备注:

1.
可用strcmp(s1,s2)函数进行字符串的比较。
2.
对于样例一中第二组数据:Apple 300是价格第一大,Candy 200是价格第二高,Bracelet
200是价格第三大。
思路:排序;水题;
代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct p{
 4     char name[50];
 5     int price;
 6 }a[10005];
 7 bool cmp(p x,p y);
 8 int main(){
 9     int  T;
10     scanf("%d",&T);
11     int tt=0;
12     while(T--){
13         tt++;
14         int n;
15         scanf("%d",&n);
16         for(int i=0;i<n;i++){
17             scanf("%s%d",a[i].name,&a[i].price);
18         }
19         int k;
20         scanf("%d",&k);
21         sort(a,a+n,cmp);
22         printf("#%d: %s %d\n",tt,a[k-1].name,a[k-1].price);
23     }
24 } 
25 bool cmp(p x,p y){
26     if(x.price!=y.price){
27         return x.price>y.price;
28     }
29     else{
30         if(strcmp(x.name,y.name)>0){
31             return true;
32         }
33         else return false;
34     }
35 }

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

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

题目描述

    黑猫在给校赛配环境,结果被服务器的各种入站规则出站规则搞得头疼,想到自己要上传GVIM、EMACS、VSCODE、Jetbrain全家桶、Visual Studio、Gedit、Microsoft Office Word、Eclipse等等,完全不知道要要花费多少时间才能上传完校赛需要的环境。

    黑猫跑去问ddjing,谁知道ddjing说:“我要去实习了,没功夫解决这个问题,你去问问其他人吧。“

    于是黑猫想请你帮他解决这个问题。

    服务器总传输速度为每秒M个单位(本题出现的所有单位都统一),黑猫现在需要上传总共n个软件(按优先级顺序从高到低给出),每个软件的大小分别为v1、v2….vn,每个软件为保持稳定连接,上传需要一个最小的传输速度为m1、m2…mn。

    服务器带宽分配的策略是:按优先级满足每一个软件要求的传输速度。如果服务器剩余的带宽不能满足某个软件最小传输速度的话,服务器将继续寻找下去,直到找到能满足最小传输速度的软件。

扫描二维码关注公众号,回复: 736959 查看本文章

    如果目前服务器的总传输速度不能满足所有还需要上传的软件的话,服务器将把传输速度全部给予当前优先级最高的(即使不能满足其最小传输速度)。

    如果目前对所有软件都满足了其最小传输速度的话,服务器将把剩余所有传输速度全部给予当前优先级最高的软件。

    黑猫想把这些开始上传以后就去陪妹子玩了,所以他想知道需要多久才能把所有东西都上传完毕,好及时赶回机房摸鱼。

输入描述:

第一行给出一个正整数,表示服务器总带宽M
第二行给出整数n,表示需要上传的n个软件。
第三行为n个正整数,第i个数表示vi。
第四行为n个正整数,第i个数表示mi。
( 1 <= M <= 1000, 1 <= n <= 100 , 1 <= vi <= 1000 , 1 <= mi <= 1000 )

输出描述:

输出一行,为上传完毕所有软件所需要的时间,保留两位小数。
示例1

输入

10
6
1 1 4 5 1 4 
10 9 8 7 6 5

输出

1.60
示例2

输入

10
6
10 9 8 7 6 5
1 1 4 5 1 4

输出

4.50
思路:水题;其实题目都是废话;只要求和,再除以传输速度;
代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     double m;
 5     int n;
 6     scanf("%lf",&m);
 7     scanf("%d",&n);
 8     double a;
 9     double sum=0;
10     for(int i=0;i<n;i++){
11         scanf("%lf",&a);
12         sum+=a;
13     } 
14     for(int i=0;i<n;i++){
15         scanf("%*lf");
16     } 
17     printf("%.2lf",sum/m);
18 }

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

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

题目描述

    iko超级超级喜欢吃糖,有一天iko想出去玩,她计划从1点走到N点(按1,2,3,...,n的顺序走),每个点都有一个补给站,第i点的补给站有a[i]颗糖,从i点走到i+1点会消耗掉b[i]颗糖,iko在出游的途中可以选择三个补给站,iko想知道她走完全程到达N点时口袋里最多还能剩下几颗糖(初始时iko的口袋里一颗糖都没有)。

输入描述:

第一行输入N(3<=N<=1000)
第二行输入N个数代表a[1].......a[N] (0<=a[i]<=1000 )
第三行输入N-1个数代表b[1]......b[N-1] ( 1<=b[i]<=1000 )

输出描述:

输出一个数字表示iko到达n点时口袋里最多剩下的糖,
若不能到达N点输出-1。
示例1

输入

3
1 3 4
3 4

输出

-1
示例2

输入

5
3 4 5 2 4
3 2 2 2

输出

3
思路:贪心+优先队列;每一次走都判断,能不能走,能走直接走,不能走的话,就从前面已经走过的补给站里选出一个糖果最多的补给站;
代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[1005],b[1005];
 4 struct cmp{
 5       bool operator()(int x,int y)
 6     {
 7         return x<y;
 8     }
 9 };
10 int main(){
11     int n;
12     scanf("%d",&n);
13     for(int i=0;i<n;i++){
14         scanf("%d",&a[i]);
15     }
16     for(int i=0;i<n-1;i++){
17         scanf("%d",&b[i]);
18     }
19     priority_queue<int,vector<int>,cmp> q;
20     int num=0;
21     int geshu=0;
22     int flag=0;
23     for(int i=0;i<n-1;i++){
24         q.push(a[i]);
25         if(num<b[i]){
26             if(geshu<3){
27                 geshu++;
28                 num+=q.top();
29                 q.pop();
30                 if(num<b[i]){
31                     flag=1;
32                     break;
33                 }
34                 num-=b[i];
35             }
36             else{
37                 flag=1;
38                 break;
39             }
40         }
41         else{
42             num-=b[i];
43         }
44     }
45     q.push(a[n-1]); 
46     if(geshu!=3&&!flag){
47         while(geshu!=3){
48             num+=q.top();
49             q.pop();
50             geshu++;
51         }
52     }
53     if(flag){
54         printf("-1\n"); 
55     } 
56     else{
57         printf("%d\n",num);     
58     }
59 }

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

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

题目描述

    ZQ是一个拥有n女朋友的万人迷,她的每一个女朋友每天晚上都会挨个给他打电话,要他讲了睡前故事才能睡觉。可是,每次他的女朋友都会挑他在吃鸡的时候打电话,ZQ总是因为挂机被舍友赶出宿舍,于是,ZQ告诉他的女朋友们,别打电话了,他会主动打过去给他们讲故事,再打电话就分手!

    于是,ZQ把他的女朋友名字写在纸上,画成一圈,顺时针编号为1~n,然后从1开始顺时针数。在每一次数数中,ZQ数k个就停下来,然后给选中的女朋友打电话讲故事。 

    现在需要你按顺序告诉我们他给女朋友打电话的顺序

输入描述:

先输入一个t,然后t组数据,每行包含两个数字n,k,n<20,k>0

输出描述:

按顺序输出每轮被选中的女朋友的编号。
示例1

输入

3
10 3
5 2
11 4

输出

3 6 9 2 7 1 8 5 10 4
2 4 1 5 3
4 8 1 6 11 7 3 2 5 10 9
思路:这就是约瑟夫环的一个变形
代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 vector<int> v;
 4 int main(){
 5     int T; 
 6     scanf("%d",&T);
 7     while(T--){
 8         int n,k;
 9         scanf("%d%d",&n,&k);
10         for(int i=1;i<=n;i++){
11             v.push_back(i);
12         }
13         int t=-1;
14         for(int i=0;i<n;i++){
15             t=(t+k)%(n-i); 
16             if(i==0)
17                 printf("%d",v[t]); 
18             else
19                 printf(" %d",v[t]);
20             v.erase(v.begin()+t); 
21             t--;
22             if(t==-1){
23                 t==(n-i-1);
24             }    
25         }
26         printf("\n");
27     }
28 }

猜你喜欢

转载自www.cnblogs.com/dahaihaohan/p/9032970.html