http://acm.nit.net.cn/showproblem.jsp?pid=1366
问题描述:
输入1个数N(1 <= N <= 5000),表示歌曲数.接下来共有N行,每行包括一个字符串m
(长度小于50字节,可能有中文,一个中文字占2个字节),以及一个数字p(p <= INT_MAX)。
m表示歌曲名,p表这首歌的优先级(1,2,3...),数字越小优先级就越高.优先级<=0的歌
曲是coder不喜欢的.保证不存在两首歌优先级相同的情况.保证不存在两首歌名称相同的情
况.
输出一个k,表示coder同学喜欢听的歌曲的数量.接下去k行,优先级从高到低,每行输出
coder同学喜欢听的音乐名称.
SAMPLE INPUT
2
月亮至上 -1
because of you 1
6
太早 3
不完整的旋律 4
第一个清晨 1
18 and life 2
still'loving 6
我恨你 5
SAMPLE OUTPUT
1
because of you
6
第一个清晨
18 and life
太早
不完整的旋律
我恨你
still'loving
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
int const ic_max = 5001;
struct stuNode
{
int iPriority;//优先级
string strSong;//歌曲名
};
void vInputData(int iN,stuNode stuSong[]);
void vGetData(string strT,stuNode& stuSong);
bool bCmp(const stuNode& stuA,const stuNode& stuB);
void vPrintAns(int iN,stuNode stuSong[]);
int main()
{
int iNum;
stuNode stuSong[ic_max];
while(cin >> iNum)
{
vInputData(iNum,stuSong);
sort(stuSong+1,stuSong+1+iNum,bCmp);
vPrintAns(iNum,stuSong);
}
return 0;
}
void vInputData(int iN,stuNode stuSong[])
{
string strTemp;
getchar();
for(int i=1; i<=iN; i++)
{
getline(cin,strTemp);//默认/n
vGetData(strTemp,stuSong[i]);
}
}
void vGetData(string strT,stuNode& stuSong)
{
int iPrio;
int iBlank;//标记最后一个空格的位置
string strPrio;//获取优先级的字符串形式
iPrio = 0;
//获取最后一个空格的位置
for(int i=strT.size()-1; i>=0; i--)
{
if(strT[i] == ' ')
{
iBlank = i;
break;
}
}
//截取相应子段
stuSong.strSong = strT.substr(0,iBlank);
strPrio = strT.substr(iBlank+1,strT.size()-iBlank);
//将字符串转换为数字
for(int i=strPrio.size()-1; i>=0; i--)
{
if(strPrio[i] == '-')
{
iPrio *= -1;
}
iPrio += (strPrio[i]-'0') * (int)pow(10.0,1.0*(strPrio.size()-1-i));
}
stuSong.iPriority = iPrio;
}
bool bCmp(const stuNode& stuA,const stuNode& stuB)
{
return stuA.iPriority < stuB.iPriority;
}
void vPrintAns(int iN,stuNode stuSong[])
{
int iTotal;
iTotal = iN;
//获取优先级<=0的个数
for(int i=1; i<=iN; i++)
{
if(stuSong[i].iPriority <= 0)
iTotal --;
else
break;
}
cout << iTotal << endl;
for(int i=iN-iTotal+1; i<=iN; i++)
{
cout << stuSong[i].strSong << endl;
}
}
分享到:
相关推荐
2. **字符串处理**:在007字符串处理.py中,我们可以学习到Python对字符串的处理,包括字符串的拼接、切片、查找、替换、分割等操作,这些都是处理文本数据时必备的技能。Python的字符串是不可变的,因此在进行字符...
内容概要:本文介绍了西北工业大学(简称西工大)NOJ(西北工业大学在线评测系统)中的一个经典题目及其解法。通过C++语言实现了一个简单而高效的欧几里得算法,用于求解两个整数的最大公约数(辗转相除法)。文中...
NOJ6.1 字符串排序是西工大NOJ社区C语言部分难题中的一个字符串处理问题。该问题要求编写一个程序,能够对字符串进行排序。该问题需要使用字符串处理函数和排序算法来解决。在解决这个问题时,需要注意字符串的比较...
西北工业大学在线评测系统(NOJ)是中国西北工业大学开发的一个在线编程评测平台,其中涵盖了众多计算机科学领域的编程题目,旨在帮助学习者提升编程能力和算法理解能力。在这众多题目中,求两个整数的最大公约数是...
本主题“第6季字符串处理裴新凤(1)”聚焦于西北工业大学NOJ在线评测系统的第六季比赛中的字符串相关题目,这些题目旨在帮助学习者提升对字符串操作的理解和运用能力。"The Clock"这一描述可能暗示着一个特定的题目,...
在“西北工业大学数据结构noj_1-6题”中,我们可以推测这是一系列与数据结构相关的编程练习题目,旨在帮助学生理解和应用各种数据结构。以下是基于这些题目可能涵盖的一些关键知识点的详细解释: 1. **线性数据结构...
4. **字符串处理**:涉及字符串的定义、拷贝、比较、加密编码、逆序等操作,以及字符串函数的使用,如`strcpy`, `strlen`, `strcat`, `strcmp`等。 5. **结构体与类**:可能包含简单的面向对象编程,如自定义数据...
罗马数字转换是一个常见的编程问题,涉及到字符串处理和数值计算。长城最长凸起可能指的是寻找一系列数据中的最大子序列和,这是一个经典的动态规划问题。Python的编辑距离则可能是关于字符串相似度计算的问题,编辑...
数组不仅能够存储多个同类型数据,还可以通过索引访问特定元素,这在处理字符串时尤为重要。例如,字符数组a用于存储用户输入的字符串,通过getchar函数逐个接收字符并存储到数组中。掌握字符数组的使用对于理解字符...
1. “1“的传奇:该题考察了字符串处理和算法设计的能力。解题需要使用动态规划和贪心算法来解决问题。 知识点:动态规划、贪心算法、字符串处理。 2. A+B:该题是经典的算法题,考察了基本的算术运算和变量赋值的...
- **字符串操作**:如"字符串排序"、"字符串逆序"、"字符串替换",这些涉及字符串处理,包括比较、反转、替换等操作。 2. **数据结构**: - **链表操作**:如"插入链表节点"、"链表动态增长或缩短"、"链表节点...
平台提供的练习题目广泛覆盖了计算机编程的基础知识,包括字符串处理、算法设计、数据结构应用等。例如,“split()和split(' ')的区别.png”文件提示了学习者注意Python中字符串的分割方法及其细微差别。这表明...
以“NOJ-nojNOJ-noj”为标题的项目,似乎暗示了一个与Node.js相关的开发环境或框架。项目中的“noj”标签可能指的是一个特定的开发工具、库或服务,尽管从字面上看似乎重复且含义不明确,但在技术领域,缩写和代号...
标题中"hzv-nojhzv-noj"这一串字符看似没有直接的含义,但作为文件标题,可能代表了特定的项目名或是某种编码。描述部分重复提及"riscv"和"noj",这可能意味着该压缩包涉及RISC-V架构相关的项目,而"noj"可能是该...
描述中的“:yum: noj noj noj noj noj”使用了表情符号和重复的“noj”,这可能表示对“noj”这一项目或内容的正面情绪,如喜欢或重视之意。“noj”作为标签,进一步强调了该压缩包文件内容与“noj”的紧密关联。...
9. **标准库函数**:如字符串处理(strcat, strcpy, strcmp等)、数学函数(sqrt, pow等)、输入输出(printf, scanf等)等。 10. **编程规范**:良好的编程风格,包括注释、命名规则、代码组织等。 完成这样的大...