C++ 从零单排(5)- ACM三和总结

继续干!


List the Books

http://acm.zju.edu.cn/网上第 2727 题

以书名、出版年份和价格为关键词,按照排序标准把书进行排序。

注意:Name 是第一排序标准,Year 是第二排序标准,Price 是第三排序标准。

思路:定义书的结构体,首先把书的信息读到vector中,然后分别定义三个Compare方法。

#include <iostream> #include <fstream> #include <string> #include <vector> #include <algorithm> using namespace std; struct Book{     string name;     int year;     int  price; }; bool CompName(const Book &b1,const Book &b2) {     if(b1.name!=b2.name) return b1.name<b2.name;     else if(b1.year!=b2.year) return b1.year<b2.year;     else return b1.price<b2.price; }  bool CompYear(const Book &b1,const Book &b2) {     if(b1.year!=b2.year) return b1.year<b2.year;     else if(b1.name!=b2.name) return b1.name<b2.name;     else return b1.price<b2.price; }  bool CompPrice(const Book &b1,const Book &b2) {     if(b1.price!=b2.price) return b1.price<b2.price;     else if(b1.name!=b2.name) return b1.name<b2.name;     else return b1.year<b2.year;  }  int main() {     ifstream cin("aaa.txt");     vector<Book> v;     Book book;     string sorting;     int n;     int i;     int line = 0;     while(cin>>n)     {         if(n==0) break;         line++;         v.clear();         for(i=0;i<n;i++)         {             cin>>book.name>>book.year>>book.price;             v.push_back(book);         }         cin>>sorting;         if(sorting=="Name") sort(v.begin(),v.end(),CompName);         else if(sorting=="Year") sort(v.begin(),v.end(),CompYear);         else if(sorting=="Price") sort(v.begin(),v.end(),CompPrice);          //Out an empty line         if(line!=1) cout<<endl;         for(i=0;i<v.size();i++)         {             cout<<v[i].name<<" "<<v[i].year<<" "<<v[i].price<<endl;         }     }     return 0; } 


Windows Message Queue

http://acm.zju.edu.cn/网上第 2724 题

消息队列是 Windows 操作系统的基石。对于每个进程,系统维持了一个消息队列。

“GET”或“PUT”表示从消息队列里抓取消,对于每条“GET”命令,直接输出它抓取的消息的名称和参数在一行上。如果消息队列是空的,那么直接输出“EMPTY QUEUE!”。对于“PUT”命令,不需要输出什么。息或把消息放入消息队列。

思路:想到了STL中的优先级队列,剩下的就简单了。注意当数据量很大的时候,用scanf和printf来节省时间。

C++实现(混合了C):

#include <iostream> #include <fstream> #include <queue> #include <string.h> #include <algorithm> using namespace std; struct Message{     char Name[100];     int Data;     int Priority;     bool operator <(const Message &a) const     {         return a.Priority<Priority;     } }; priority_queue<Message> v;  int main() {     char command[100];     Message message;     while(scanf("%s",command)!=EOF)     {         if(strcmp(command,"GET")==0)         {             if(v.size()==0) printf("EMPTY QUEUE!\n");             else{             printf("%s %d\n",v.top().Name,v.top().Data);             v.pop();             }         }         else if(strcmp(command,"PUT")==0)         {             scanf("%s%d%d",&message.Name,&message.Data,&message.Priority);             v.push(message);         }     }     return 0; } 


好的,ACM就先到这。


总结

来来去去做了一些题,也看了一些题。

好在有一些参考书,自己的基础也还好,学习的比较顺利。

但并不是非常地快乐。

关于算法,虽然很多人和我说一定要注重,但我还是觉得应该是实用为主,比如学图形学可以去研究光线追踪,做游戏寻路,就学A*,A+。

但让我单纯去研究算法本身,还是有些DT..


最近比较关注的是两个英语单词-motivation,passion。

动力和激情实在是太重要了。

对于A题-冥思苦想N个钟头,才能在屏幕上看到一个红色的Accept,说真的,很难让我感到激动还有成功的喜悦,况且,还不一定能够A掉它。

我还是适合去创造一些事物,那种从无到有的过程才能给自己带来最大的快乐。

C++从零单排系列也暂时告一段落。


参考书籍:

ACM 程序设计-曾棕根


你可能感兴趣的:(C++)