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

Posted 大海浩瀚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了陕西师范大学第七届程序设计竞赛网络同步赛相关的知识,希望对你有一定的参考价值。

链接: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。

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

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

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

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

输入描述:

第一行给出一个正整数,表示服务器总带宽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 }

 

以上是关于陕西师范大学第七届程序设计竞赛网络同步赛的主要内容,如果未能解决你的问题,请参考以下文章

陕西师范大学第七届程序设计竞赛网络同步赛 F WWX的礼物数学/k进制下x^n的位数/log

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)D - 数圈圈

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)A - 所有情况的和

牛客网 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-低年级组)求最大值

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)C - 小明打联盟

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)B - 幸运大奖