vjudge链接:CCNUACM Team Contest 2019 Round #3
HDU链接:2017中国大学生程序设计竞赛 - 女生专场 (HDU6023-6032)
这场组队赛17级都是7题,18级都是4题(gdl:皆大欢喜)
A. Automatic Judge
题意:
模拟一个选手交题,返回结果有AC,CE,RE,WA…AC之前除了CE的未通过提交都算20minutes罚时,输入一个选手交题信息,求他的过题数和罚时
思路:
直接模拟即可
我们的代码<-戳这里
B. Building Shops
题意:
有n个教室(1<=n<=3000),要在这n个教室里面挑若干个建立商店。其中第i个城市的坐标为Xi,在第i个教室的位置上建商店的花费为Ci。(-1E9<=Xi,Ci<=1E9)
要保证对于每个教室,要么第在这个教室的位置有商店,要么这个教室左边的某个教室有商店。 在第i个教室建商店的费用为Ci,如果这个教室的位置没有建商店,那么这个教室的花费为它左边最靠近它的建了商店的教室和他的距离。求最小的花费。
分析:
把教室按Xi从小到大(从左到右)排序。显然第一个教室是一定要建商店的(因为它左边不可能有商店)。
我们一开始想贪心,后来发现贪心贪不对,只能dp。
dp的思路:
//转移方程
For(i,2,n)
{
dp[i][1] = min(dp[i-1][0],dp[i-1][1])+a[i].c;
For(j,1,i-1)
LL add = sum[i]-sum[j]-(a[j].x-a[1].x)*(1ll*i-j),
dp[i][0] = min(dp[i][0],dp[j][1]+add);
}
我们的代码
C. Coprime Sequence(FB)
题意:
给n个数(3<=n<=1E5)a1,a2,a3…an,这些数的gcd为1,现在可以从这些数之中随便删去一个。使得剩下的数的gcd最大,求这个最大的gcd。
分析:
zx想的前缀和与后缀和:
设sumL = gcd(a[1],a[2],…,a[i])
设sumR = gcd(a[n],a[n-1],…,a[i])
设要删除的数为a[i],那么删掉后数列的gcd为gcd(sumL[i-1],sumR[i+1]) 然后for一遍即可。一血(^_^)
我们的代码
D. Deleting Edges
题意:
给一个n(n<=50)个顶点的图的邻接矩阵,求从顶点0到其它所有顶点的最短路径的条数的乘积
分析:
两次Dijkstra,第一次求最短路,第二次求原点到各个点最短路的条数(每次松弛操作时,若能松弛,则num[i]++)
我们的代码
E. Easy Summation(FB)
题意:
求1^k + 2^k + … + n^k之和(k<=5)
分析:
暴力求即可,签到题,一血。^_^
我们的代码
G. Graph Theory
题意:
这道题是给出一个图,问是否能满足“perfect matching”——每个顶点与且只与一条边相连。
分析:
一开始读错题WA了两发,做法是:
我们的代码
H. Happy Necklace
题意:
要做一个长度为n(n<=1E18)的手链(不是环),每个单位长度可以是蓝宝石或者红宝石。但是要求每个长度为素数的区间红宝石数量不少于蓝宝石。求满足条件的手链的个数%1000000007
分析:
这么大的数,是矩阵快速幂无疑了(矩阵快速幂加速dp)
我们来推递推式吧
状态定义:末两位的颜色
RR: 0
RB: 1
BR: 2
转移方程:
RR: dp[i][0] = dp[i-1][0]+dp[i-1][2]
RB: dp[i][1] = dp[i-1][0]
BR: dp[i][2] = dp[i-1][1]
递推式的矩阵表示:
|dp[i][0]| |1,0,1| |dp[i-1][0]|
|dp[i][1]| = |1,0,0| * |dp[i-1][1]|
|dp[i][2]| |0,1,0| |dp[i-1][2]|
|dp[n][0]| |1,0,1| |dp[2][0]|(1)
|dp[n][1]| = |1,0,0| ^(n-2) * |dp[2][1]|(1)
|dp[n][2]| |0,1,0| |dp[2][2]|(1)
perfect!
我们的代码