寒假2018培训:DAY1

全新一刻:

经过8小时的车程,我终于来到了福州,因为刚还奉上了自2002年来的第一场雪,气温就跟浙江差不多了,很舒服——前水;

第一天上课:

上午,我们老师讲了枚举和深搜,虽然我都有基础,但依旧有很多我没听到过的,真想不到补码有这么大的用处。

下午,我们考了场练习:

1:

#1034. 【FZSZ2018寒假普及组Day1】及格

 统计

[问题描述]

小A这学期上了一门课,这门课分数的评定标准如下:

课程分数=xa\%+yb\%+z*(100-a-b)\%,其中x为平时作业成绩、y为期中考试成绩、z为期末考试成绩,x,y,z,a,b,100-a-b均是不大于100不小于0的整数,最终分数如果有小数部分则直接舍去。

现在小A知道了自己平时作业、期中考试的成绩以及比例系数a和b,他想知道为了达到及格(60分),自己期末至少要得到多少分,如果小A无论如何都无法及格,那么就输出"poor little A!"(不含引号)。

[输入格式]

第一行一个正整数T,表示数据组数。

接下来T行,每行四个非负整数x,y,a,b。

[输出格式]

输出T行,分别表示每组数据中,小A期末要得到多少分,或者"poor little A!"

[样例输入]

3
100 80 20 30
100 100 50 30
100 0 0 50

[样例输出]

32
0
poor little A!

[数据规模与约定]

对于100%100%的数据:1≤T≤1000,0≤x,y,a,b≤100,0≤a+b≤1001≤T≤1000,0≤x,y,a,b≤100,0≤a+b≤100。

这题初看是道数学题,其实不然,凡是用数学思维的都是零分(我也是)

正解(其实是暴力)应该枚举,数据说明只需枚举0~100就行,不会超时,如过都不行,就输出poor little A!

难度不大吧!然而这题只有4人AC(有60多人)的确;

伪代码:

cin>>t;

for(int i=1;i<=t;i++)

{ 

cin>>x>>y>>a>>b;

for(int j=0;j<=100;j++)

{

q=x*a%+y*b%+j*(100-a-b)\%

if(q>=60){

cout<<j;k=1;}

if(k==1)cout<<"poor little A!";

k=0;

}

2:

#1035. 【FZSZ2018寒假普及组Day1】数排列

 统计

[问题描述]

给定一个nn个数的序列aiai,其中每项均为00或11。

你的任务是统计符合以下性质的11到nn排列(排列中第ii项记为pipi)的个数:

若ai=0ai=0,则要求pipi是ii的因数,否则要求pipi是ii的倍数。

[输入格式]

第一行一个正整数TT,表示数据组数。

接下来TT组数据,每组数据第一行一个正整数nn表示序列长度,第二行nn个用空格分隔的整数aiai。

[输出格式]

对于每组数据输出一行一个正整数表示答案。

[样例输入]

1

3

0 0 0

[样例输出]

1

[数据规模与约定]

对于50%50%的数据,n≤10n≤10。

对于100%100%的数据,1≤T≤10,1≤n≤15,0≤ai≤11≤T≤10,1≤n≤15,0≤ai≤1。

这题要看理解了

 

直接把深搜的框架打好了,注意了,这里不要先搜全排列再判断,而是要搜索每一位时的就要考虑题目中的限制条件。

3:

#1036. 【FZSZ2018寒假普及组Day1】正确答案

 统计

[问题描述]

现在有nn名玩家围成一圈玩变种版三国杀国战,在这个游戏中一共有mm个势力,编号从11到mm,且每个势力都至少有一名玩家。

第ii名玩家有一个自己的初始势力aiai,但为了游戏的公平性,一个势力的玩家数不能超过X=n/2X=n/2下取整,当一个势力的玩家数xx超过XX时,则需要将这个势力的x−Xx−X名玩家变成野心家(野心家与其它野心家和正常势力都属于不同势力),为了题目方便,不妨假设可以任意选择,在上述过程后,每名玩家的势力就唯一确定,不会更改了。

当一名玩家死亡之后,其被移出游戏,左右两边的玩家变为相邻。

当一段连续区间内(可以只含有一名玩家)的玩家都具有相同的势力A>0A>0时,我们称该连续段为势力AA的一个队列,你的任务就是对每个除野心家之外的势力AA,计算出在AA势力的所有玩家存活的情况下,至少要多少名不同势力的玩家死亡,才能使AA势力的所有玩家形成一个队列,注意当势力AA过大时,除了选择死亡的角色外,你还需要先合理地指定初始势力AA的哪些玩家变成野心家来最小化这个值。

[输入格式]

第一行一个正整数TT,表示数据组数。

接下来TT组数据,每组数据第一行有四个非负整数n,m,k1,k2n,m,k1,k2,接下来nn行,每行一个长度为mm的由YY或NN构成的字符串,表示一个人的答案。

[输出格式]

对每组数据输出一行,表示所求正确答案,或者-1。

[样例输入]

3
2 2 2 0
YY
YY
2 2 0 0
YY
NN
2 2 1 0
YY
YY

[样例输出]

YY
NY
-1

[数据规模与约定]

第1,2个测试点满足:1≤n,m≤181≤n,m≤18。

第3,4个测试点满足:k1,k2k1,k2恰有一个为00。

第5,6个测试点满足:k1+k2>0k1+k2>0。

第7,8个测试点满足:k1=k2=0k1=k2=0。

对于所有数据均有:1≤T≤100,1≤n,m≤50,0≤k1,k2,k1+k2≤n1≤T≤100,1≤n,m≤50,0≤k1,k2,k1+k2≤n。

 

简单但复杂,

该用枚举:

4:

#1037. 【FZSZ2018寒假普及组Day1】队列

 统计

[问题描述]

现在有nn名玩家围成一圈玩变种版三国杀国战,在这个游戏中一共有mm个势力,编号从11到mm,且每个势力都至少有一名玩家。

第ii名玩家有一个自己的初始势力aiai,但为了游戏的公平性,一个势力的玩家数不能超过X=n/2X=n/2下取整,当一个势力的玩家数xx超过XX时,则需要将这个势力的x−Xx−X名玩家变成野心家(野心家与其它野心家和正常势力都属于不同势力),为了题目方便,不妨假设可以任意选择,在上述过程后,每名玩家的势力就唯一确定,不会更改了。

当一名玩家死亡之后,其被移出游戏,左右两边的玩家变为相邻。

当一段连续区间内(可以只含有一名玩家)的玩家都具有相同的势力A>0A>0时,我们称该连续段为势力AA的一个队列,你的任务就是对每个除野心家之外的势力AA,计算出在AA势力的所有玩家存活的情况下,至少要多少名不同势力的玩家死亡,才能使AA势力的所有玩家形成一个队列,注意当势力AA过大时,除了选择死亡的角色外,你还需要先合理地指定初始势力AA的哪些玩家变成野心家来最小化这个值。

[输入格式]

第一行为一个正整数TT,表示数据组数。

每组数据第一行有两个正整数n,mn,m,分别表示玩家数和势力数。

接下来一行每行nn个不超过mm的正整数aiai,按顺时针从某一名玩家开始给出每名玩家的初始势力。

[输出格式]

对每组数据输出一行mm个非负整数,第ii个数表示势力ii的答案。

[样例输入]

2
8 3
1 2 3 1 2 3 1 2
8 3
1 1 2 1 1 2 1 3

[样例输出]

3 3 2
1 2 0

第二组数据中,指定第7位的玩家为野心家,可以得到第一种势力的最优结果1(第3位玩家死亡)。

[数据规模与约定]

对于40%40%的数据,1≤T≤10,n,m≤3001≤T≤10,n,m≤300。

对于另外30%30%的数据,不存在野心家。

对于100%100%的数据:1≤T≤100,2≤m≤n≤500001≤T≤100,2≤m≤n≤50000,数据中nn的和不超过105105,保证每个势力至少存在一名玩家。

数据规模较大,请使用stdio.h中的scanf和printf函数进行输入输出。

 

这题可以把他看成个圈了,野心家变零,一一枚举,再找最短路径和,然后注意一下输入输出,不能忘了数据~~野心家也要来个专门判断,让他们离队列远的变成,没有野心家就简单了,但也别忘了圈儿

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值