PAT(A)-1025 PAT Ranking 模拟|排序|神奇段错误_1025 pat ranking 段错误-程序员宅基地

技术标签: 排序  bug集  

1025 PAT Ranking (25 分)

Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it is your job to write a program to correctly merge all the ranklists and generate the final rank.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive number N (≤100), the number of test locations. Then N ranklists follow, each starts with a line containing a positive integer K (≤300), the number of testees, and then K lines containing the registration number (a 13-digit number) and the total score of each testee. All the numbers in a line are separated by a space.

Output Specification:

For each test case, first print in one line the total number of testees. Then print the final ranklist in the following format:

registration_number final_rank location_number local_rank

The locations are numbered from 1 to N. The output must be sorted in nondecreasing order of the final ranks. The testees with the same score must have the same rank, and the output must be sorted in nondecreasing order of their registration numbers.

Sample Input:

2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85

Sample Output:

9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4

 题意不难 就是输入多组数据根据数据排序规则排序 先把每一组的组排序 然后再放到一起写一个汇总排序

注意汇总排序时可以不在结构体里存汇总排序的结果 否则容易超内存 可以直接在输出时根据当前元素的序号和是否跟上个元素的分数相同去输出 如果与上个元素相同就输出上个元素的名词 否则输出当前元素的序号

这种题意简单直观还有没什么算法 只需要模拟实现的问题 注意好实现细节就够了

神奇的是 一开始的代码C读入和C++读入都有 交了一发段错误段错误答案错误...没有一组数据是对的

 

然后鬼使神差地把C式读入全换成c++的后 神奇的全答案正确了。。。

有没有大佬知道这是怎么回事?

ACcode:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
struct stu{
    string reg;
    int sc;
    int locNum,locRank;
    stu(){}
    stu(string aa,int b,int c):reg(aa),locNum(b),locRank(c){}
    stu(string aa,int s):reg(aa),sc(s){}
};
stu ans[300010];
int tag;
bool cmp1(stu a,stu b){
    return a.sc>b.sc||(a.sc==b.sc&&a.reg<b.reg);
}
int main(){
    int t;
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin>>t;
    int flag=0,fr;
    for(int tt=1;tt<=t;tt++){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            string num;
            int sc;
            cin>>num>>sc;
            ans[tag++]=stu(num,sc);
        }
        sort(ans+flag,ans+tag,cmp1);
        ans[flag].locNum = tt;
        ans[flag].locRank = fr = 1;
        for(int i=flag+1;i<tag;i++){
            ans[i].locNum = tt;
            ++fr;
            if(ans[i].sc!=ans[i-1].sc)ans[i].locRank = fr;
            else ans[i].locRank = ans[i-1].locRank;
        }
        flag+=n;
    }
    sort(ans,ans+tag,cmp1);
    cout<<tag<<endl;
    fr = 1;
    cout<<ans[0].reg<<" "<<fr<<" "<<ans[0].locNum<<" "<<ans[0].locRank<<endl;

    for(int i=1;i<tag;i++){
        if(ans[i].sc!=ans[i-1].sc)
            cout<<ans[i].reg<<" "<< (fr = i+1) <<" "<<ans[i].locNum<<" "<<ans[i].locRank<<endl;
        else
            cout<<ans[i].reg<<" "<< fr <<" "<<ans[i].locNum<<" "<<ans[i].locRank<<endl;
    }
    return 0;
}

这个是删除解绑语句 且混用scanf和cin仍旧AC啦~ 应该就是解绑后的scanf和cin以后两者不能混用 混用就会出问题

#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
struct stu{
    string reg;
    int sc;
    int locNum,locRank;
    stu(){}
    stu(string aa,int b,int c):reg(aa),locNum(b),locRank(c){}
    stu(string aa,int s):reg(aa),sc(s){}
};
stu ans[300010];
int tag;
bool cmp1(stu a,stu b){
    return a.sc>b.sc||(a.sc==b.sc&&a.reg<b.reg);
}
int main(){
    int t;

    scanf("%d",&t);
    int flag=0,fr;
    for(int tt=1;tt<=t;tt++){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            string num;
            int sc;
            cin>>num>>sc;
            ans[tag++]=stu(num,sc);
        }
        sort(ans+flag,ans+tag,cmp1);
        ans[flag].locNum = tt;
        ans[flag].locRank = fr = 1;
        for(int i=flag+1;i<tag;i++){
            ans[i].locNum = tt;
            ++fr;
            if(ans[i].sc!=ans[i-1].sc)ans[i].locRank = fr;
            else ans[i].locRank = ans[i-1].locRank;
        }
        flag+=n;
    }
    sort(ans,ans+tag,cmp1);
    cout<<tag<<endl;
    fr = 1;
    cout<<ans[0].reg<<" "<<fr<<" "<<ans[0].locNum<<" "<<ans[0].locRank<<endl;

    for(int i=1;i<tag;i++){
        if(ans[i].sc!=ans[i-1].sc)
            cout<<ans[i].reg<<" "<< (fr = i+1) <<" "<<ans[i].locNum<<" "<<ans[i].locRank<<endl;
        else
            cout<<ans[i].reg<<" "<< fr <<" "<<ans[i].locNum<<" "<<ans[i].locRank<<endl;
    }
    return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33859479/article/details/88240589

智能推荐

Android-gradle配置详解_gradle unittests.returndefaultvalues-程序员宅基地

文章浏览阅读667次。**android gradle配置详解**AppExtension类及其属性可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候,经常看到它,它是什么呢?如果你按ctrl+鼠标左键对着android{},点击进去就知道了,其实android{…}表示的就是AppExtension这个类。我们再来看看AppExtension继承关系:除了AppExtension之外还有2个类与之相似..._gradle unittests.returndefaultvalues

Python-Django毕业设计校园二手交易平台(程序+Lw)_二手跳蚤市场用python开发可行性-程序员宅基地

文章浏览阅读251次。页面可以查看订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等信息,并可根据需要进行修改操作,如图5-页面可以查看订单编号、商品名称、商品图片、购买数量、价格/积分、折扣价格、总价格/总积分、折扣总价格、支付类型、状态、地址等内容,并可根据需要对。页面可以查看商品编号、商品名称、商品分类、封面、新旧程度、价格、单限、库存等信息,并可根据需要进行删除,修改等操作,如图5-查看商品编号、商品名称、商品分类、封面、新旧程度、价格、单限、库存。_二手跳蚤市场用python开发可行性

AfxBeginThread的介绍/基本用法和Window多线程使用详解_afxbeginthread()可以调用多核吗-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏8次。AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的。现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程:用户界面线程的AfxBeginThread 用户界面线程的AfxBeginThread的原型如下:CWinThread* AFXAPI A_afxbeginthread()可以调用多核吗

Fisher判别:理解数据分类的经典方法

在机器学习和统计分类的领域中,Fisher判别(也称为Fisher线性判别分析)是一种非常重要的方法,旨在从数据中提取重要特征,以实现对样本的分类。即Fisher判别分析(Fisher Discriminant Analysis, FDA)是一种经典的线性分类方法,用于特征提取和数据降维,特别是在模式识别和机器学习领域中。这种方法由统计学家和生物学家罗纳德·费舍尔在1936年提出,至今仍广泛应用于各种数据分析任务中。

《前端面试题》- TypeScript - TypeScript的优/缺点

问题简述TypeScript的优/缺点答案优点增强了代码的可读性和可维护性包容性,js可以直接改成ts,ts编译报错也可以生成js文件,兼容第三方库,即使不是ts编写的社区活跃,完全支持es6缺点增加学习成本增加开发成本,因为增加了类型定义需要编译,类型检查会增加编译时长,语法和类型系统复杂的话时间特别特别长eval和new Function()这种操作类型系统管不到...

.NET 实现实体对象深拷贝(克隆/复制)的几种方法_net 对象复制-程序员宅基地

文章浏览阅读6.7k次。浅拷贝:指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝对象和原对象仅仅是引用名称有所不同,但是它们共用一份实体。对任何一个对象的改变,都会影响到另外一个对象。大部分的引用类型,实现的都是浅拷贝,引用类型对象之间的赋值,就是复制一个对象引用地址的副本,而指向的对象实例仍然是同一个。深拷贝:指对象的子段被拷贝,同时字段引用的对象也进行了拷贝。深拷贝创建的是整个源对象的结构,拷贝对象和原对象相..._net 对象复制

随便推点

用switch case语句写考生成绩等级判断代码:_modelsim用case语句实现成绩-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏3次。用switch case语句写考生成绩等级判断代码: public class A{ public static void main(String [] args){ /* 需求: 有效成绩范围:[0-100] 考试成绩可能带有小数 _modelsim用case语句实现成绩

各系统命令行清屏快捷键_windterm清屏-程序员宅基地

文章浏览阅读7.4k次,点赞2次,收藏5次。Mac:快捷键:cammand+kLinux:快捷键:ctrl+lWindows:命令:cls_windterm清屏

启动Spark Shell,在Spark Shell中编写WordCount程序,在IDEA中编写WordCount的Maven程序,spark-submit使用spark的jar来做单词统计_idea使用代码打开sparkshell-程序员宅基地

文章浏览阅读3.7k次。1.启动Spark Shellspark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序。要注意的是要启动Spark-Shell需要先启动Spark-ha集群,Spark集群安装和部署参考:http://blog.csdn.net/tototuzuoquan/article/details/744815701.2.1、启动_idea使用代码打开sparkshell

移动地图开发调试点滴-程序员宅基地

文章浏览阅读201次。起因:从混合式开发转原生开发,主要还是地图这块H5用户体验不行从事条件:面向对象基础较好,6大原则能融汇。Java最好懂设计模式 多线程等。大业务(空间数据):这个不说。调试:与微软的一流工具开发不同,这个确实考验耐心与心理素质,有点慢。选用eclise 与android studio因人而异。有时候晚上1-2小时报错第2天早上突然又好,这个时候需要从数据和业务2个方面找原因,特别是网

【深度学习 | 卷积&haar】面部表情识别系统|原理详解&附详细案例&源码_面部识别csdn-程序员宅基地

文章浏览阅读2.2k次,点赞85次,收藏15次。在微表情识别系统的研究中,对微表情的准确理解是至关重要的。本章将深入探讨微表情的定义、与常规表情的区别以及微表情的分类,为读者提供深入了解微表情的基础知识。微表情是指人类在极短时间内、难以察觉的情感表达。这种表达往往仅持续数毫秒到数百毫秒,通常被认为是一种情感的真实显露,不受到个体的自我控制。微表情通常表现在面部的微小运动上,例如眼神的变化、嘴角的抽动等。_面部识别csdn

【编译技术实验】词法分析器(C++实现)_char *typevalues[]= {"keyword", "indentifier", "co-程序员宅基地

文章浏览阅读607次。编译技术实验,词法分析器_char *typevalues[]= {"keyword", "indentifier", "constant", "operator", "deli

推荐文章

热门文章

相关标签