(排序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 ...
随机推荐
- 2020 NUC 19级第一次训练赛
感染(low) Description n户人家住在一条直线上,从左往右依次编号为1,2,...,n.起初,有m户人家感染了COVID-19,而接下来的每天感染的人家都会感染他家左右两家的人,问t天后 ...
- eclipse安装SVN插件的两种方法
eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse 里Help菜单的“Install New Software”,通过 ...
- Zero 初识Sciter
在浏览有关Sciter技术前,您需要花点时间浏览以下内容. 您是否需要花时间学习Sciter? 如果您的工作或您想从事的工作与桌面应用开发无关,那么您不需要学习Sciter. 如果您不认同HTML\C ...
- IDEA 单行注释与代码对齐
效果 修改步骤 Settings -> Editor -> Code Style (1)修改.java文件的注释 comment 评论.注释.意见. (2)修改.html文件的注释 ( ...
- Python运行目录或压缩文件
如果你在你的工程文件根目录下放一个__main__.py文件,你就可以使用根目录运行整个程序. 你的工程像这样 ex. app/ |-test.py |-test2.py |-__main__.py ...
- ls查看所有文件
ls -al 查看所有文件,包括隐藏文件
- 吴裕雄--天生自然JAVA数据库编程:使用JDBC连接ORACLE数据库
DROP TABLE person ; DROP SEQUENCE myseq ; CREATE SEQUENCE myseq ; CREATE TABLE person ( id INT PRIMA ...
- iplimage 转HBITMAP
HBITMAP IplImage2hBitmap(IplImage* pImg) { cvFlip(pImg, NULL); BYTE tmp[]; BITMAPINFO *bmi = (BITMAP ...
- day07-Python运维开发基础(深/浅拷贝、字典/集合/相关操作)
1. 深拷贝与浅拷贝 # ### 深拷贝 和 浅拷贝 """ a = 7 b = a a = 8 print(b) lst1 = [1,2,3] lst2 = lst1 ...
- 使用JMX连接JVM
什么是JMX? 什么是JMX,Java Management Extensions,即Java管理扩展,是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以跨越一系列异构操作系统平台.系统体系 ...