2021.1.28个人赛补题报告
比赛总结:本次比赛我成绩一般,很大一部分原因是第一题过题速度太慢,简单题熟练度不够,练习程度不够;第二题直接不会做,原因是结构体不熟,属于知识掌握程度不够对于等级稍高一点的题目练习更是不够。总结下来就是练习不够。
反思:多练习,练熟简单题目,练会能力可以触及的题目,cf搞起来。
补题:
b题:b题当时也知道该干什么,就是敲不出来,结构体是解决这个题的关键,可是当时不熟悉结构体。导致题目没有接解出来。//B. Knights of a Polygonal Table
题意:n个骑士,每个骑士可以杀死比他武力值低的骑士,并获得他杀死的骑士的金币,每个骑士最多杀死k个骑士,输出每个骑士最大可获得的金币数。代码如下:
#include<bits/stdc++.h>
#include<algorithm>
#define ll long long
using namespace std;
const ll nl=1e5+5;
ll re[11];
struct kn{
ll dp;
ll d;
ll it;
ll price;
}a[nl];
ll cmp(kn p1,kn p2){
return p1.d<p2.d;
}
ll cmp1(ll p1,ll p2){
return p1<p2;
}
ll cmp2(kn p1,kn p2){
return p1.it<p2.it;
}
int main(){
ll n,k;
cin>>n;
cin>>k;
ll i,j;
for(i=0;i<n;i++){
cin>>a[i].d;
a[i].it=i;
}
for(i=0;i<n;i++){
cin>>a[i].price;
}
if(k==0){
for(i=0;i<n;i++){
cout<<a[i].price<<" ";
}
}else{
sort(a,a+n,cmp);
ll sum=0,num=0;
for(num=0;num<k;num++){
sum+=a[num].price;
a[num].dp=sum;
re[num]=a[num].price;
}
j=k;
for(j=k;j<n;j++){
sort(re,re+k,cmp1);
a[j].dp=a[j].price;
for(i=0;i<k;i++){
a[j].dp+=re[i];
}
if(a[j].price>re[0]){
re[0]=a[j].price;
}
}
sort(a,a+n,cmp2);
for(i=0;i<n;i++){
cout<<a[i].dp<<" ";
}
}
}
浙公网安备 33010602011771号