链接:https://www.nowcoder.com/acm/contest/94/C

大家都知道想从华南理工大学的本科毕业并不是一件简单的事情,作为一名大四即将毕业的学生,优酱正在为她的毕业论文愁眉不展,为什么呢?并不是毕业设计的课题太难了,而是毕业论文有着非常奇怪的格式要求,其中最令人头痛的就是如何正确地引用参考文献。

而众所周知,某工是一个制度非常严格而且变化速度非常快的学校。因此发生在毕业论文的Deadline当晚突然宣布参考文献的格式要求产生了变化以致于必须通宵改论文这样的紧急事态并不是什么稀奇的事情。因此为了防止自己毕不了业,优酱决定开发一款可以自动生成符合国际通用的常见参考文献格式(IEEE、Nature、APA、Harvard)的参考文献列表的软件,这样就算是学校突然改变主意,优酱也可以放心睡觉。

你可能很奇怪,这样的软件不是有一大把吗?什么Beginote啊,Womendeley啊,Onetero啊,Readtrihedron啊,然而乃要知道在大天朝,这些软件依赖的某不存在的学术搜索引擎因为某些不可描述的原因是无法访问的啊,所以这些成熟的软件并不能使用。而且更严重的问题是,由于优酱现在正在某黑心研究所实习,每天的个人时间都被压榨殆尽了,所以实在是没办法去开发这款对她来说很重要的软件了,没有办法她只能跑来找你帮忙。你能帮优酱顺利毕业吗?

插入论文元数据字段

因为优酱在她的毕业论文里只引用了期刊上的论文(Journal Paper),而且都是国外的,所以我们只关注Journal Paper的引用格式。我们都知道,一篇Paper的元数据大概(Metadata)由如下字段构成:

◆ 论文的标题(Paper Title),这是一个字符串,只包含ASCII编码内的可见字符和空格。
◆ 论文刊登的期刊的标题(Journal Title),这同样是一个只包含ASCII编码内的可见字符和空格的字符串。
◆ 论文刊登期刊的标题的缩写(Journal Title Abbreviation),这还是一个只包含ASCII编码内的可见字符和空格的字符串(为什么要强调这么多遍呢?因为优酱怕说不清楚被喷啊)。
◆ 论文刊登的年份,是一个至多四位的正整数,比如2018。
◆ 论文刊登的月份,如果论文刊登的月份是已知的话,是一个至多12的正整数。如果论文刊登的月份未知,是-1。
◆ 论文刊登的日子,如果论文刊登的日子是已知的话,是一个符合西历历法的,至多31的正整数。如果论文刊登的日子未知,是-1。
◆ 论文刊登的期刊的卷号(Volume),通常情况下,是一个整数,但有时也可能是一个一个只包含ASCII编码内的可见字符和空格的字符串。
◆ 论文刊登的期刊的期号(Issue),通常情况下,是一个整数,但有时也可能是一个一个只包含ASCII编码内的可见字符和空格的字符串。
◆ 论文刊登的期刊的页码(Pages),通常情况下,呈现xxxx-xxxx的形式,表示起始页码和终止页码,但有时也可能是一个一个只包含ASCII编码内的可见字符和空格的字符串。
◆ 论文刊登的文档识别码(doi),是一个一个只包含ASCII编码内的可见字符和空格的字符串,格式通常形如10.1038/nbt.3519。
◆ 作者人数(Author Count),是一个正整数,表示作者的人数,通常不会超过20(优酱并没有闲到强行在论文中引用人类基因组计划的Paper)。
◆ 作者名单(Author List),是一个由固定格式的字符串组成的列表,每一行都单独表示一名作者,形如:

Bray, Nicolas L.
Pimentel, Harold
Marine, Jean-Christophe
Geurts, Pierre
Aerts, Jan
van den Oord, Joost
Atak, Zeynep Kalender
Wouters, Jasper
Aerts, Stein

其中对于每行:英文逗号前面的部分,是作者的Last Name,如果Last Name分多节的话,节与节之间用空格隔开。英文逗号后面的部分,是作者的First Name,如果First Name分多节的话,节与节之间用逗号隔开。优酱保证她找来的测试数据都是真实的,作者的人名中就算包含奇怪的字符也都被换掉了,一定可以用ASCII编码,空格一定是节与节之间的分界点,且不会出现多余的空格。注意在学术论文中作者的顺序极为重要(因为涉及分赃问题),所以给出的作者顺序不可以调换。而且优酱保证对于每个人名,英文逗号只会出现一次,而且是用来分隔Last Name和First Name的。

当优酱想往软件中添加一篇论文的时候,会输入IMPORT命令,然后依序键入上述的元数据字段,格式大概如下(尖括号对应上文所述的字段):

IMPORT
<Paper Title>
<Journal Title>
<Journal Title Abbreviation>
<Year>
<Month>
<Day>
<Volume>
<Issue>
<Pages>
<doi>
<Author Count>
<Author List>

参考文献引用格式

接下来分别介绍四种常见的参考文献引用格式:

IEEE格式

下面是几个用IEEE表示的参考文献示例:

[1] C. Trapnell, L. Pachter, and S. L. Salzberg, "TopHat: Discovering splice junctions with RNA-Seq," Bioinformatics, vol. 25, no. 9, pp. 1105-1111, 2009.
[2] T. Kociumaka, "Minimal Suffix and Rotation of a Substring in Optimal Time," (Cpm2016), vol. 54, no. 28, pp. 1-1, 2016.
[3] D. I. Bolnick and W. E. Stutz, "Frequency dependence limits divergent evolution by favouring rare immigrants over residents," Nature, vol. 546, no. 7657, pp. 285-288, 2017.
[4] S. Aibar et al., "SCENIC: single-cell regulatory network inference and clustering," Nat. Methods, vol. 14, no. 11, pp. 1083-1086, Oct. 2017.

IEEE参考文献引用格式分为如下几个部分:

1. 参考文献序号:在IEEE格式中,参考文献序号需要以[X]表示,其中X是整数序号。

2. 作者名单:IEEE格式中对文献的作者名单表示要细化为如下的规则:

每名作者显示为<F. N.> <Last Name>:作者的First Name的每一节都要进行缩写,即:只保留名字的首字并进行大写化(如果首字是英文字母的话),然后加一个英文句号。而作者的Last Name要完整印出。
        2.1. 当作者只有一人时,直接印出作者名称。

省略一万字!!!!

解题思路:大模拟,现场没做出来,回宿舍重打就A了。

#include<bits/stdc++.h>
using namespace std;struct paper{string title;string journal_title;string jta;string year;string yue;string ri;string volume;string issue;string pages;string doi;int cnt;string fname[100];string lname[100];
};
vector<paper> ps;
map<string,string> mp;char toupper1(char a){if(a>='a'&&a<='z')a+='A'-'a';return a;
}void printIEEE(int id,int num){paper p=ps[id];printf("[%d] ",num);if(p.cnt==1){cout<<p.fname[0]<<" "<<p.lname[0]<<", ";}if(p.cnt==2){cout<<p.fname[0]<<" "<<p.lname[0]<<" and "<<p.fname[1]<<" "<<p.lname[1]<<", ";}if(p.cnt>2&&p.cnt<7){for(int i=0;i<p.cnt-2;i++){cout<<p.fname[i]<<" "<<p.lname[i]<<", ";}cout<<p.fname[p.cnt-2]<<" "<<p.lname[p.cnt-2]<<", and "<<p.fname[p.cnt-1]<<" "<<p.lname[p.cnt-1]<<", ";}if(p.cnt>6){cout<<p.fname[0]<<" "<<p.lname[0]<<" et al., ";}cout<<"\""<<p.title<<",\" ";cout<<p.jta<<", ";cout<<"vol. "<<p.volume<<", ";cout<<"no. "<<p.issue<<", ";cout<<"pp. "<<p.pages<<", ";if(p.yue!="-1")cout<<mp[p.yue]<<" ";cout<<p.year<<"."<<endl;}void  printNature(int id,int num){paper p=ps[id];printf("%d. ",num);if(p.cnt==1){cout<<p.lname[0]<<", "<<p.fname[0]<<" ";}if(p.cnt==2){cout<<p.lname[0]<<", "<<p.fname[0]<<" & "<<p.lname[1]<<", "<<p.fname[1]<<" ";}if(p.cnt>2&&p.cnt<6){for(int i=0;i<p.cnt-2;i++){cout<<p.lname[i]<<", "<<p.fname[i]<<", ";}cout<<p.lname[p.cnt-2]<<", "<<p.fname[p.cnt-2]<<" & "<<p.lname[p.cnt-1]<<", "<<p.fname[p.cnt-1]<<" ";}if(p.cnt>5){cout<<p.lname[0]<<", "<<p.fname[0]<<" et al. ";}cout<<p.title<<". ";cout<<p.jta<<" ";cout<<p.volume<<", ";cout<<p.pages<<" ";cout<<"("<<p.year<<")."<<endl;
}void    printAPA(int id){paper p=ps[id];if(p.cnt==1){cout<<p.lname[0]<<", "<<p.fname[0]<<" ";}if(p.cnt==2){cout<<p.lname[0]<<", "<<p.fname[0]<<", & "<<p.lname[1]<<", "<<p.fname[1]<<" ";}if(p.cnt>2&&p.cnt<8){for(int i=0;i<p.cnt-2;i++){cout<<p.lname[i]<<", "<<p.fname[i]<<", ";}cout<<p.lname[p.cnt-2]<<", "<<p.fname[p.cnt-2]<<", & "<<p.lname[p.cnt-1]<<", "<<p.fname[p.cnt-1]<<" ";}if(p.cnt>7){for(int i=0;i<6;i++){cout<<p.lname[i]<<", "<<p.fname[i]<<", ";}cout<<"... ";cout<<p.lname[p.cnt-1]<<", "<<p.fname[p.cnt-1]<<" ";}cout<<"("<<p.year<<"). ";cout<<p.title<<". ";cout<<p.journal_title<<", ";cout<<p.volume<<"(";cout<<p.issue<<"), ";cout<<p.pages<<". ";cout<<"https://doi.org/"<<p.doi<<endl;
}void printHarvard(int  id){paper p=ps[id];if(p.cnt==1){cout<<p.lname[0]<<", "<<p.fname[0]<<" ";}if(p.cnt==2){cout<<p.lname[0]<<", "<<p.fname[0]<<" and "<<p.lname[1]<<", "<<p.fname[1]<<" ";}if(p.cnt>2&&p.cnt<4){for(int i=0;i<p.cnt-2;i++){cout<<p.lname[i]<<", "<<p.fname[i]<<", ";}cout<<p.lname[p.cnt-2]<<", "<<p.fname[p.cnt-2]<<" and "<<p.lname[p.cnt-1]<<", "<<p.fname[p.cnt-1]<<" ";}if(p.cnt>3){cout<<p.lname[0]<<", "<<p.fname[0]<<" et al. ";}cout<<"("<<p.year<<") ";cout<<"\'"<<p.title<<"\', ";cout<<p.journal_title<<", ";cout<<p.volume<<"(";cout<<p.issue<<"), pp. ";cout<<p.pages<<". ";cout<<"doi: "<<p.doi<<"."<<endl;
}int main()
{mp["1"]="Jan.";mp["2"]="Feb.";mp["3"]="Mar.";mp["4"]="Apr.";mp["5"]="May";mp["6"]="Jun.";mp["7"]="Jul.";mp["8"]="Aug.";mp["9"]="Sept.";mp["10"]="Oct.";mp["11"]="Nov.";mp["12"]="Dec.";// freopen("data.in","r",stdin);string op;while(1){cin>>op;getchar();if(op=="END")break;if(op=="IMPORT"){paper temp;getline(cin,temp.title);getline(cin,temp.journal_title);getline(cin,temp.jta);getline(cin,temp.year);getline(cin,temp.yue);getline(cin,temp.ri);getline(cin,temp.volume);getline(cin,temp.issue);getline(cin,temp.pages);getline(cin,temp.doi);string aaa;getline(cin,aaa);temp.cnt=stoi(aaa);for(int i=0;i<temp.cnt;i++){getline(cin,aaa);string ln,fn;bool f=1;for(int j=0;j<aaa.length();j++){if(aaa[j]==','){f=0;continue;}if(f){ln.push_back(aaa[j]);}else{fn.push_back(aaa[j]);}}string rfn;rfn.push_back(toupper1(fn[1]));rfn.push_back('.');for(int j=3;j<=fn.length();j++){if(fn[j]==' '){rfn.push_back(' ');rfn.push_back(toupper1(fn[j+1]));rfn.push_back('.');}}temp.fname[i]=rfn;temp.lname[i]=ln;}ps.push_back(temp);}else{if(op=="CITE"){string type;cin>>type;int num;cin>>num;int temp;for(int i=1;i<=num;i++){cin>>temp;if(type=="IEEE")printIEEE(temp-1,i);if(type=="Nature")printNature(temp-1,i);if(type=="APA")printAPA(temp-1);if(type=="Harvard")printHarvard(temp-1);}}}}return 0;
}

“景驰科技杯”2018年华南理工大学程序设计竞赛 C Youhane's Undergraduate Thesis (大模拟)相关推荐

  1. “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)

    题目链接 题目描述: 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对 ...

  2. “景驰科技杯”2018年华南理工大学程序设计竞赛 A. 欧洲爆破(思维+期望+状压DP)...

    题目链接:https://www.nowcoder.com/acm/contest/94/A 题意:在一个二维平面上有 n 个炸弹,每个炸弹有一个坐标和爆炸半径,引爆它之后在其半径范围内的炸弹也会爆炸 ...

  3. 2018华南理工大学程序设计竞赛 H-对称与反对称

    H-对称与反对称 题目描述 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩 ...

  4. 2019年华南理工大学程序设计竞赛(春季赛)

    Problem C 六学家的困惑 https://ac.nowcoder.com/acm/contest/625/C 题解:区间DP 1.对给定的两个字符串按规则以后最大排列(区间DP) 2.反转字符 ...

  5. 数独挑战(牛客网 2019年华南理工大学程序设计竞赛(春季赛))

    链接:https://ac.nowcoder.com/acm/contest/625/E 来源:牛客网 数独是一种填数字游戏,英文名叫 Sudoku,起源于瑞士,上世纪 70 年代由美国一家数学逻辑游 ...

  6. 2019年华南理工大学程序设计竞赛

    目录 C 六学家的困惑(模拟+思维) E 数独挑战(dfs) H Parco_Love_GCD(思维) I 炒股(思维) L 石头剪刀布(水题) C 六学家的困惑(模拟+思维) [题意] 有两个字符串 ...

  7. 景驰科技与联通实现全国首个5G网络下L4级无人驾驶应用

    伊瓢 发自 凹非寺  量子位 报道 | 公众号 QbitAI 景驰无人车又有新进展. 昨天,景驰科技正式宣布与广东联通开展5G战略合作,共同建立基于L4级无人驾驶的"5G联合创新实验室&qu ...

  8. 『每日AI』王劲离职景驰科技丨无人驾驶领域的领跑者还是叛逃者?

    关注"Ai时速" 智慧赢未来!  Ai时速  因着Ai的美好:用速度和激情创享Ai时代! 职业创业|PK分享|进化成长 编辑|小Ai     图文来源 |网络 每日Ai 写在前面 ...

  9. 景驰科技又生闹剧?法人代表潘思宁将CFO吕庆诉至法院

    自动驾驶创业公司景驰科技可谓是磨难重重,在原 CEO 王劲卷入侵犯百度商业秘密离职事件之后,又生闹剧.景驰科技法人代表潘思宁爆料称:景驰科技 CFO 吕庆等人质押其股权,并伪造自己的签名和股东会决议变 ...

最新文章

  1. 规则就够用?还是必须上机器学习?46页ppt教你如何把规则引擎和机器学习融会贯通...
  2. Zabbix poller processes more than 75% busy
  3. Qt Creator加载占位符数据
  4. 1947-2021 NBA总冠军次数排行榜
  5. mysql less6教程_Sqli labs系列-less-56 报错注入法(上)
  6. 01背包问题-一维数组实现原理
  7. Asp.Net学习之-母板
  8. tftpd32刷路由器方法_不走弯路:小米路由器3G 刷Padavan固件简单教程
  9. 北京地区的汉代古驿道粗探
  10. EXCEL如何将平均值加减标准差设置为科学计数法显示
  11. 软考:嵌入式系统设计师
  12. 怎么给图片加边框线?图片加边框的方法
  13. vue之使用 vue-pdf插件
  14. Hdu 4090 GemAnd Prince (搜索_2010年北京区域赛)
  15. vmware mac安装教程 | 不能全屏的终极原因
  16. c4d-造型工具-6
  17. 理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器
  18. 2022国内IB学校表现如何?
  19. 第十九天:初识Linux+系统与设置命令+目录管理
  20. 什么是EC鼓风机(ec blower fan)?

热门文章

  1. switch按钮的显示隐藏
  2. 企业为什么要上云?企业上云的好处和优势有哪些
  3. 【贪玩巴斯】带你一起攻克英语语法长难句—— 第二章——并列句全解 2021年12月17日——2022年2月5日
  4. FFHQ数据解压问题记录
  5. win7 64位 32位旗舰版下载
  6. ubuntu 20.04 | 常用软件 必要配置
  7. mysql下载个压缩文件怎么安装_压缩包法安装mysql
  8. [语义分割]SPP、空洞卷积与ASPP总结
  9. 金融量化交易场景下数据库如何改造?同花顺、弘源泰平真实案例分享
  10. Flink中的CEP(二)