题目
内卷指不能从外部渠道获取资源,没有产生整体的增量,只能在存量分配上做文章,往往损害内部一部分甚至绝大多数群体利益来补偿少数群体的利益,最终整体利益没有增加,持续性内耗的一种状态。内卷本身是个艰难晦涩的社会学专用名词,今天之所以能成为热搜,都是因为今天内卷是很多人今天可以亲身感受到的社会现象。
“内卷”被现在很多高校学生来指代非理性的内部竞争或“被自愿”竞争,这种风气已经逐渐蔓延到中小学甚至幼儿园。
已知浙江工业大学幼儿园今年有 n 名新生入学,每名同学会有以下属性:
编号 id
初始能力值 s
自卷系数 p,即该名同学每天结束后能力能够增长 p
为了选拔出一名“超级卷王”,浙工大幼儿园每天都会进行一次测试,直到角逐出“超级卷王”为止。
每次测试会根据同学们的能力值为第一关键字降序排名,编号为第二关键字按升序排名,淘汰排名较低的[n/2]人(n/2向下取整)
在本次测试中排名前十的同学会受到老师的褒奖,备受激励,能力值立即增长R。
当剩余人数不少于6人时,排名前三的同学会受到大多数人的嘲讽,心情变差,下一天能力值下降L。
请你帮浙工大幼儿园的老师预测出最终的卷王是谁,并输出他的编号和最终的能力值。
……
解答
简单的模拟,按照题目要求写即可
#include <bits/stdc++.h>
typedef long long ll;
using namespace std ;
int num;
int n,r,l;
//node储存学生信息
struct node{
int pos;
ll pp;
ll prove;
}stu[101];
//cmp为比较规则
int cmp(node a,node b)
{
if(a.pp==b.pp)
return a.pos<b.pos;
else
return a.pp>b.pp;
}
int main(){
cin>>n>>r>>l;
num=n;
for(int i=0;i<n;i++)
cin>>stu[i].pos;
for(int i=0;i<n;i++)
cin>>stu[i].pp;
for(int i=0;i<n;i++)
cin>>stu[i].prove;
while(num!=1)
{
sort(stu,stu+num,cmp);
num=num-num/2;
for(int i=0;i<num&&i<10;i++)
stu[i].pp+=r;
if(num>=6)
{
stu[0].pp-=l;
stu[1].pp-=l;
stu[2].pp-=l;
}
//当只剩1人时,无需等到第二天
if(num!=1)
{
for(int i=0;i<num;i++)
stu[i].pp+=stu[i].prove;
}
}
cout<<stu[0].pos<<" "<<stu[0].pp<<endl;
}