洛谷 排序Ex

news/2024/5/19 22:49:52 标签: 算法, 快速排序, 排序算法

P1583 魔法照片

#include <bits/stdc++.h>
using namespace std;
struct qz
{
    int w;
    int d,c;
    int l;
} x[20200];
int cmp(const qz &a,const qz &b)//cmp函数写一个即可
{
    if(a.w!=b.w)
        return a.w>b.w;
    else
        return a.d<b.d;
}
int main()
{
    int n,k;
    cin>>n>>k;
    int e[15];
    for(int i=0; i<10; i++)
        cin>>e[i];
    for(int i=0; i<n; i++)
    {
        x[i].d=i+1;//题目有点绕,输入时自带序号
        cin>>x[i].w;
    }
    sort(x,x+n,cmp);
    /*for(int i=0; i<n; i++)
        cout<<x[i].w<<" ";
    cout<<endl;*/
    for(int i=0; i<n; i++)
    {
        x[i].l=i+1;//额外成绩分组按照排序后的序号来
        x[i].c=(x[i].l-1)%10+1;
        x[i].w=x[i].w+e[x[i].c-1];
        //cout<<x[i].d<<" "<<x[i].c<<" "<<x[i].w<<endl;
    }
    sort(x,x+n,cmp);
    for(int i=0; i<k; i++)
        cout<<x[i].d<<" ";
    return 0;
}

P1051 谁拿了最多奖学金

#include <bits/stdc++.h>
using namespace std;
struct stu
{
    string name;
    int qm,bj,lw;
    char gb,xb;
    int id;
    int mon=0;
} x[120];
int cmp(const stu &a,const stu &b)
{
    if(a.mon!=b.mon)
        return a.mon>b.mon;
    else
        return a.id<b.id;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>x[i].name>>x[i].qm>>x[i].bj>>x[i].gb>>x[i].xb>>x[i].lw;
        x[i].id=i;
    }
    for(int i=0;i<n;i++)
    {
        if(x[i].qm>80&&x[i].lw>=1)
            x[i].mon=x[i].mon+8000;
        if(x[i].qm>85&&x[i].bj>80)
            x[i].mon=x[i].mon+4000;
        if(x[i].qm>90)
            x[i].mon=x[i].mon+2000;
        if(x[i].qm>85&&x[i].xb=='Y')
            x[i].mon=x[i].mon+1000;
        if(x[i].bj>80&&x[i].gb=='Y')
            x[i].mon=x[i].mon+850;
    }
    sort(x,x+n,cmp);
    int res=0;
    for(int i=0;i<n;i++)
        res=res+x[i].mon;
    cout<<x[0].name<<endl<<x[0].mon<<endl<<res;
    return 0;
}

P1093 奖学金

#include <bits/stdc++.h>
using namespace std;
struct stu
{
    int yw,sx,yy,zf;
    int id;
} x[320];
int cmp(const stu &a,const stu &b)
{
    if(a.zf!=b.zf)
        return a.zf>b.zf;
    else if(a.yw!=b.yw)
        return a.yw>b.yw;
    else
        return a.id<b.id;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cin>>x[i].yw>>x[i].sx>>x[i].yy;
        x[i].zf=x[i].yw+x[i].sx+x[i].yy;
        x[i].id=i+1;
    }
    sort(x,x+n,cmp);
    for(int i=0;i<5;i++)
        cout<<x[i].id<<" "<<x[i].zf<<endl;
    return 0;
}

P1309 瑞士轮
最初的解决方法,每次就算新的s值,接下来进行快速排序
结果是超时

#include <bits/stdc++.h>
using namespace std;
struct stu
{
    long long int s,w;
    long long int id;
} x[200050];
int cmp(const stu &a,const stu &b)
{
    if(a.s!=b.s)
        return a.s>b.s;
    else
        return a.id<b.id;
}
int main()
{
    int n,r,q;
    cin>>n>>r>>q;
    n=n*2;
    for(int i=0; i<n; i++)
    {
        cin>>x[i].s;
        x[i].id=i+1;
    }
    for(int i=0; i<n; i++)
        cin>>x[i].w;
    sort(x,x+n,cmp);
    for(int a=0; a<r; a++)
    {
        for(int i=1; i<n; i=i+2)
        {
            if(x[i].w>x[i-1].w)
                x[i].s++;
            else
                x[i-1].s++;
        }
        sort(x,x+n,cmp);
    }
    cout<<x[q-1].id;
    return 0;
}

接下来是优化算法


http://www.niftyadmin.cn/n/816079.html

相关文章

洛谷 简单的模拟1

P1003 铺地毯 #include <bits/stdc.h> using namespace std; struct dt {int a,b;int g,k; } z[10050]; int main() {int n;cin>>n;for(int i1; i<n; i)cin>>z[i].a>>z[i].b>>z[i].g>>z[i].k;int x,y;cin>>x>>y;int res-1…

洛谷 简单的模拟2

P1056 排座椅 #include <bits/stdc.h> using namespace std; struct h {int id,num; } x[1200],y[1200]; int cmp(const h &a,const h &b) {return a.num>b.num; } int cmp1(const h &c,const h &q) {return c.id<q.id; } int main() {int m,n,k,…

洛谷 深度优先搜索

从某个状态开始&#xff0c;不断转移状态直到无法转移&#xff0c;在退回前一步&#xff0c;继续转移其他状态&#xff0c;如此不断重复得到解的过程即为深度优先搜索。采用递归函数实现较为简单 例题 部分和问题 给定n个正数&#xff0c;从中选出若干数&#xff0c;使其结果…

管道符、重定向与环境变量

主要内容&#xff1a; 1、定向技术的5种模式 2、管道命令符 3、Linux系统命令中常见的通配符和转义符 输入输出重定向 输入重定向是将文件导入到命令中 输出重定向是将输出到屏幕的结果导入文件中&#xff08;分类&#xff1a;标准输出重定向 || 错误输出重定向&#xff09; …

编写 shell 脚本

shell 脚本命令工作方式有两种&#xff1a; 1、交互式&#xff1a;每输入一条命令就立即执行 2、批处理&#xff1a;由用户事先编辑好一个完整的 shell 脚本&#xff0c;shell 一次性执行脚本的所有命令 编写简单的shell脚本 实际上在vim编辑器按次序写上Linux脚本&#xff0…

洛谷 交叉模拟

P1042 乒乓球 #include <bits/stdc.h> using namespace std; char x[62590]; int h11[62500],d11[62500]; int h21[62500],d21[62500]; int main() {for(int i0;; i){cin>>x[i];//注意本题中分行输入的方法if(x[i]E)break;}int k0;for(int i0; x[i]!E; i){if(x[i]…

NEFU 队列

大一寒假训练七&#xff08;队列&#xff09; 报数-队列-约瑟夫环 #include <bits/stdc.h> using namespace std; int main() {int m,n;cin>>n>>m;queue<int>vis;for(int i1; i<n; i)vis.push(i);int num0;while(vis.size()>2){num;int xvis.f…

NEFU 优先队列

大一寒假集训八 优先队列 合并果子-优先队列 #include <bits/stdc.h> using namespace std; priority_queue<int,vector<int>,greater<int> >vis;//从小到大排列&#xff0c;固定格式记住就好 int main() {int n;cin>>n;for(int i0;i<n;i){…