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语言部分难题中的一个字符串处理问题。该问题要求编写一个程序,能够对字符串进行排序。该问题需要使用字符串处理函数和排序算法来解决。在解决这个问题时,需要注意字符串的比较...
本主题“第6季字符串处理裴新凤(1)”聚焦于西北工业大学NOJ在线评测系统的第六季比赛中的字符串相关题目,这些题目旨在帮助学习者提升对字符串操作的理解和运用能力。"The Clock"这一描述可能暗示着一个特定的题目,...
内容概要:本文详细介绍了西北工业大学在线评测系统(NOJ)中的一道经典编程题——求两个整数的最大公约数。通过欧几里得算法(辗转相除法)的具体实现和解释,帮助读者理解和掌握该算法的原理。参考代码使用了C++...
在“西北工业大学数据结构noj_1-6题”中,我们可以推测这是一系列与数据结构相关的编程练习题目,旨在帮助学生理解和应用各种数据结构。以下是基于这些题目可能涵盖的一些关键知识点的详细解释: 1. **线性数据结构...
4. **字符串处理**:涉及字符串的定义、拷贝、比较、加密编码、逆序等操作,以及字符串函数的使用,如`strcpy`, `strlen`, `strcat`, `strcmp`等。 5. **结构体与类**:可能包含简单的面向对象编程,如自定义数据...
数组不仅能够存储多个同类型数据,还可以通过索引访问特定元素,这在处理字符串时尤为重要。例如,字符数组a用于存储用户输入的字符串,通过getchar函数逐个接收字符并存储到数组中。掌握字符数组的使用对于理解字符...
1. “1“的传奇:该题考察了字符串处理和算法设计的能力。解题需要使用动态规划和贪心算法来解决问题。 知识点:动态规划、贪心算法、字符串处理。 2. A+B:该题是经典的算法题,考察了基本的算术运算和变量赋值的...
- **字符串操作**:如"字符串排序"、"字符串逆序"、"字符串替换",这些涉及字符串处理,包括比较、反转、替换等操作。 2. **数据结构**: - **链表操作**:如"插入链表节点"、"链表动态增长或缩短"、"链表节点...
noj noj noj noj noj
riscv noj noj noj noj noj
:yum: noj noj noj noj noj
9. **标准库函数**:如字符串处理(strcat, strcpy, strcmp等)、数学函数(sqrt, pow等)、输入输出(printf, scanf等)等。 10. **编程规范**:良好的编程风格,包括注释、命名规则、代码组织等。 完成这样的大...
《西北工业大学NOJ在线评测系统C语言答案解析》 在编程学习的过程中,实践与测试是提升技能的关键步骤。西北工业大学的NOJ(Network Online Judge)在线评测系统为广大学者提供了一个良好的平台,用于检验和提升...