(排序EX)P1583 魔法照片
题解:
需要注意的是,快排完之后并不是按照编号从小到大的顺序输出
using namespace std;
int r=0;
void swap(int &a,int &b){
int t=a;
a=b;
b=t;
}
void sort(int s[],int l,int r,int n[])//应用二分思想
{
int mid=s[(l+r)/2];//中间数
int i=l,j=r;
do{
while(s[i]>mid) i++;//查找左半部分比中间数大的数
while(s[j]<mid) j--;//查找右半部分比中间数小的数
if(i<=j)//如果有一组不满足排序条件(左小右大)的数
{
swap(s[i],s[j]);//交换
swap(n[i],n[j]);
i++;
j--;
}
}while(i<=j);//这里注意要有=
if(l<j) sort(s,l,j,n);//递归搜索左半部分
if(i<r) sort(s,i,r,n);//递归搜索右半部分
}
{
if(k[i]>k[i+1]){
swap(k[i],k[i+1]);//交换
}
r=i+1;
if(s[r]==s[r+1]){
sort2(s,k,r);
}else{
return;
}
if(k[i]>k[i+1]){
swap(k[i],k[i+1]);//交换
}
return ;
}
{
int n,k;
cin>>n>>k;
int e[10],w[n],num[n];
for(int i=0;i<10;i++){
cin>>e[i];
}
int ret=0;
for(int i=0;i<n;i++){
cin>>w[i];
ret++;
num[i]=ret;
}
sort(w,0,n-1,num);
int key=1;
while(key){
for(int i=0;i<n;i++){
if(w[i]==w[i+1]&&num[i]>num[i+1]){
for(i;i<n;i++){
if(w[i]==w[i+1]){
sort2(w,num,i);
i=r;
}
}
break;
}
if(i==ret-1){
key=0;
}
}
}
{
cout<<"*********"<<endl;
for(int i=0;i<n;i++){
cout<<w[i]<<" "<<num[i]<<endl;;
}
}
for(int i=0;i<n;i++){
w[i]+=e[i%10];
}
key=1;
while(key){
for(int i=0;i<n;i++){
if(w[i]==w[i+1]&&num[i]>num[i+1]){
for(i;i<n;i++){
if(w[i]==w[i+1]){
sort2(w,num,i);
i=r;
}
}
break;
}
if(i==ret-1){
key=0;
}
}
}
{
cout<<"*********"<<endl;
for(int i=0;i<n;i++){
cout<<w[i]<<" "<<num[i]<<endl;;
}
}
for(int i=0;i<k;i++){
cout<<num[i]<<" ";
}
cout<<endl;
return 0;
}
优秀的题解:
#include<cstdio>
#include<algorithm>
using namespace std;
int e[12],n,k;
struct person{
int w;//权值
int num;//编号
int d;//类别
}p[20010];//储存每个人的信息
int w_comp(const person &a,const person &b){
if(a.w!=b.w)return a.w>b.w;//从大到小排序
return a.num<b.num;//序号小优先
}//结构体排序
int main(){
scanf("%d%d",&n,&k);
for(int i=0;i<10;i++)scanf("%d",&e[i]);
for(int i=0;i<n;i++){
scanf("%d",&p[i].w);
p[i].num=i+1;
}//读入+编号
sort(p,p+n,w_comp);//第一次排序
for(int i=0;i<n;i++){
p[i].d=i%10;//分类
p[i].w+=e[p[i].d];//加上e[i]
}
sort(p,p+n,w_comp);//第二次排序
for(int i=0;i<k;i++)printf("%d ",p[i].num);
}
(排序EX)P1583 魔法照片的更多相关文章
- (sort 排序)P1583 魔法照片 洛谷
题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...
- 洛谷 P1583 魔法照片
P1583 魔法照片 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初 ...
- 洛谷 P1583 魔法照片【二级结构体排序】
题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...
- 洛谷P1583 魔法照片【模拟+排序】
一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序,每人就有 ...
- 洛谷P1583——魔法照片(结构体排序)
https://www.luogu.org/problem/show?pid=1583#sub 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...
- P1583 魔法照片
题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...
- Luogu P1583 魔法照片
题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...
- 【排序+模拟】魔法照片 luogu-1583
题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...
- 洛谷 P1583魔法照片 & P1051谁拿了最多奖学金 & P1093奖学金
题目:https://www.luogu.org/problemnew/show/P1583 思路:sort sort sort //#include<bits/stdc++.h> #in ...
随机推荐
- SDL 显示汉字
#include "stdafx.h" #pragma comment(lib,"SDL.lib") #pragma comment(lib,"SDL ...
- 《O’Reilly精品图书系列共21册》azw3
套装书目: <机器学习:实用案例解析> <利用Python进行数据分析> <社交网站的数据挖掘与分析(原书第2版)> <社会网络分析:方法与实践> &l ...
- JDBC--调用函数&存错过程
1.通过Connection对象的prepareCall()方法创建CallableStatement对象的实例,在使用prepareCall()方法时需传入一个String类型的字符串,该字符串用于 ...
- Day2-G-Sticks-POJ1011
George took sticks of the same length and cut them randomly until all parts became at most 50 units ...
- Day3-F-Buy Low Sell High-CodeForces867E
You can perfectly predict the price of a certain stock for the next N days. You would like to profit ...
- 通用dao的demo
代码片段 1. [代码]整型映射工具 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 package org.dave.common.databas ...
- POJ 2718 Smallest Difference dfs枚举两个数差最小
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19528 Accepted: 5 ...
- OO第三次博客作业(第三单元总结)
(1)梳理JML语言的理论基础.应用工具链情况 Java 建模语言(JML)将注释添加到 Java 代码中,这样我们就可以确定方法所执行的内容,而不必说明它们如何做到这一点.有了 JML,我们就可以描 ...
- 安卓10GB内存旗舰手机的普及,能成为拯救DRAM厂商的救命稻草吗?
你对2019年手机即将展现出的全新变化,有哪些期待?是全新的处理器.更名副其实的全面屏,还是愈发强大的拍照功能,抑或折叠屏幕?但不管你有怎样的期待,手机厂商似乎总是"不解风情".常 ...
- Redis详解(四)——删除策略
Redis详解(四)--删除策略 Redis中的数据特征 Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令来获取其状态,当 key 不存在时,返回 -2 . 当 k ...