首页 > 其他分享 >小朋友排队

小朋友排队

时间:2023-02-06 18:31:46浏览次数:40  
标签:int 排队 pos long stu 小朋友 include




标题:小朋友排队


    n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。


    每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。


    如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。


    请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。


    如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。


【数据格式】


    输入的第一行包含一个整数n,表示小朋友的个数。
    第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。
    输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。


例如,输入:
3
3 2 1
程序应该输出:
9


【样例说明】
   首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。




【数据规模与约定】
    对于10%的数据, 1<=n<=10;
    对于30%的数据, 1<=n<=1000;
    对于50%的数据, 1<=n<=10000;
    对于100%的数据,1<=n<=100000,0<=Hi<=1000000。




资源约定:
峰值内存消耗 < 256M
CPU消耗  < 1000ms




请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。


注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。






40分代码:

# include <iostream>
# include <cstdio>
# include <algorithm>
# include <cstring>

using namespace std;


struct Stu{
int num;
int step;
};

int a[100009];
Stu stu[100009];




int main(){

int n;

memset(stu,0,sizeof(stu));


scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
stu[i].num = a[i];
}

sort(a,a+n);
int j;
for(int i=0;i<n;i++){
for(j=i;j<n;j++){
if(a[i]==stu[j].num){

break;

}
}

for(int k=j;k>i;k--){

stu[k].step++;
stu[k-1].step++;
Stu t;
t = stu[k];
stu[k] = stu[k-1];
stu[k-1] = t;

}

}

int ans = 0;

for(int i=0;i<n;i++){
if(stu[i].step==0) continue;
else{

// printf("%d ",stu[i].step);
ans+=(stu[i].step+1)*stu[i].step/2;
}
}

printf("%d\n",ans);



return 0;
}



90分代码:

# include <iostream>
# include <cstdio>
# include <cstring>
# define N 100000+9
using namespace std;

long long a[N],c[N],d[N];

long long lowbit(long long x){
return x&-x;
}

void modify(long long x,int d){

while(x<N){
c[x]+=d;
x+=lowbit(x);
}
}

long long sum(long long x){

long long ans = 0;
while(x>0){
ans+=c[x];
x-=lowbit(x);
}

return ans;
}

int main(){

int n;

memset(c,0,sizeof(c));

scanf("%d",&n);
int m;
for(int i=1;i<=n;i++){
scanf("%d",&m);
++m;
a[i] = m;

modify(a[i],1);//前面比他大的
d[i] = i-sum(a[i]);
}

memset(c,0,sizeof(c));
long long ans = 0;
for(int i=n;i>0;i--){
modify(a[i],1);
d[i] += sum(a[i]-1);
ans+=(d[i]+1)*d[i]/2;
}
printf("%I64d\n",ans);

return 0;
}




AC代码:


#include <stdio.h>
#include <string.h>
#define MAX 1000100
typedef long long ll ;

ll t[MAX] , a[100100] , b[100100] ;
ll lowbit(ll x) { return x&(-x) ; }


ll getSum(ll pos) {
ll sum = 0 ;

while(pos>0) {
sum += t[pos] ;
pos -= lowbit(pos) ;
}

return sum ;
}


void update(ll pos){

while(pos<MAX) {
t[pos]++ ;
pos += lowbit(pos) ;
}
}

int main()
{
int n;
scanf("%d",&n) ;
ll sum = 0 ;

for(int i = 1 ; i <=n ; ++i) {
scanf("%I64d",&a[i]) ;

++a[i];
update(a[i]) ;
b[i] = i-getSum(a[i]);

}



memset(t,0,sizeof(t)) ;

for(int i = n ; i > 0 ; --i) {
update(a[i]);
b[i] += getSum(a[i]-1);
sum += ((b[i]+1)*b[i])/2;

}

printf("%I64d\n",sum) ;

return 0 ;
}


标签:int,排队,pos,long,stu,小朋友,include
From: https://blog.51cto.com/u_15955675/6040221

相关文章

  • 蓝桥杯-小朋友崇拜圈
    小朋友崇拜圈班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。在一个游戏中,需要小朋友坐一个圈,每个小朋友都有自己最崇拜的小朋友在他的右手边。求满足条件的......
  • 洛谷 P1223 排队接水
    题目传送门:https://www.luogu.com.cn/problem/P1223题目:Description:有nn个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n......
  • AcWing1170. 排队布局[USACO05]
    解题思路\(\qquad\)这题也是一个比较裸的差分约束:多了的那个输出\(-2\)的其实就是在差分约束系统中\(1\)号点和\(n\)号点没有约束关系,也就是\(1\)和\(n\)号不连通。由于这......
  • 分布式排队叫号系统源码出售
    我司开发的分布式排队叫号系统,支持政务大厅、银行、工商、税务等应用场景。1、采用C/S和B/S混合架构,后台采用B/S架构,易于维护2、支持WINDOWS、android系统3、兼容多种LED屏......
  • 还在打印店排队打印文件?足不出户就能在线自助打印的系统
    如果你需要打印一些文件,那么你会选择怎么样的打印方式呢?相信很多人的第一反应就是去周边打印店打印文件,但是现在路边越来越多的打印店消失不见了,即便是找打一家打印店,在遇......
  • R7-1 字符排队
    R7-1字符排队分数 15全屏浏览题目切换布局作者 颜晖单位 浙大城市学院本题要求编写程序,将给定字符串中的字符,按照ASCII码顺序从小到大排......
  • 实践丨GaussDB(DWS)资源管理排队原理与问题定位
    摘要:GaussDB(DWS)提供了资源管理功能,用户可以根据自身业务情况对资源进行划分,将资源按需划分成不同的资源池,不同资源池之间资源互相隔离。本文分享自华为云社区《GaussDB(......
  • 围圈小朋友报数退出问题
    新手上路,qiu指教原问题:12个小朋友手拉手站成一个圆圈,从第一个小朋友开始报数,报到6的那个小朋友退出到圈外,然后他的下一位重新报“1”。这样继续下去,最后只剩下一个小朋友,他......
  • 拓端数据|R语言代写如何使用排队论预测等待时间?
    介绍顾名思义,排队论是对用于预测队列长度和等待时间的长等待线的研究。这是一种流行的理论,主要用于运营,零售分析领域。到目前为止,我们已经解决了传入呼叫量和呼叫持续时间事......
  • 基于redis乐观锁实现并发排队 - 基于scrapy运行数量的控制
    有个需求场景是这样的,使用redis控制scrapy运行的数量。当系统的后台设置为4时,只允许scapry启动4个任务,多余的任务则进行排队。概况最近做了一个django+scrapy+celery......