2015年nefu寒假集训结构体排序专题解题报告
来源:互联网 发布:清梦繁华冢 知乎 编辑:程序博客网 时间:2024/05/21 17:05
A
排序字符串,利用课件里讲到的sort用法,直接递增排序,然后倒序输出就可以了。
标程如下:
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;char a[100005];int main(){ //freopen("data.in","r",stdin); //freopen("data.out","w",stdout); while(~scanf("%s",a)) { int n=strlen(a); sort(a,a+n); for(int i=n-1;i>=0;i--) printf("%c",a[i]); printf("\n"); } return 0;}
B
这道题有点难度,不知道大家会做成什么样。对于排序的cmp函数我们这样定义:
先是数量优先,然后考虑时间:
在排序的时候要注意,队伍若没有ac这一道题目,那么他提交无论多少次都是不计入罚时的,至于处理大家好好看看标程,我写的还算是比较有脉络的,挺好理解。
#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>using namespace std;struct note{ int num,x,y,z; char s[24]; int ti;} a[100005];bool cmp(note a,note b){ if(a.num!=b.num) return a.num>b.num; return a.ti<b.ti;}int n;int main(){ // freopen("data.in","r",stdin); // freopen("data.out","w",stdout); while(~scanf("%d",&n)) { for(int i=0; i<n; i++) { scanf("%s%d%d%d",a[i].s,&a[i].x,&a[i].y,&a[i].z); a[i].num=0; } for(int i=0; i<n; i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); if(a[i].x!=-1) { a[i].x+=(x-1)*20; a[i].num++; } else a[i].x=0; if(a[i].y!=-1) { a[i].y+=(y-1)*20; a[i].num++; } else a[i].y=0; if(a[i].z!=-1) { a[i].z+=(z-1)*20; a[i].num++; } else a[i].z=0; a[i].ti=a[i].x+a[i].y+a[i].z; } sort(a,a+n,cmp); for(int i=0; i<n; i++) { printf("%s %d %d\n",a[i].s,a[i].num,a[i].ti); } } return 0;}
C
这道题没什么难的,不过我任性了一把,给大家挖了个坑,如果不仔细读题很容易上当,题目去掉的是最高分和次低分。看清这一点然后排个序,求下平均数就轻松AC了。
#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>using namespace std;int n;double a[100005];int main(){ //freopen("data.in","r",stdin); //freopen("data.out","w",stdout); while(~scanf("%d",&n)) { double sum=0.0; for(int i=0;i<n;i++) { scanf("%lf",&a[i]); sum+=a[i]; } sort(a,a+n); sum=sum-(a[n-1]+a[1]); printf("%.4lf\n",sum/(n-2)); } return 0;}
D
这道题是第二道题的简单版,不过我也给大家留陷阱了,不细心又会WA几次的,题目描述的比例顺序为b a c,而输入顺序是a b c,不知道大家能不能一下子就注意到。看清题后,我们利用sort就可以排一下了,我是这样写的cmp函数:
#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>using namespace std;struct note{ char s[25]; double sum,x,y,z;}a[100005];bool cmp(note a,note b){ if(a.sum!=b.sum) return a.sum>b.sum; if(a.x!=b.x) return a.x>b.x; if(a.y!=b.y) return a.y>b.y; return a.z>b.z;}int T,n;double aa,b,c;int main(){ int tt=0; // freopen("data.in","r",stdin); // freopen("data.out","w",stdout); scanf("%d",&T); while(T--) { scanf("%d%lf%lf%lf",&n,&aa,&b,&c); aa/=100.0; b/=100.0; c/=100.0; for(int i=0;i<n;i++) { scanf("%s%lf%lf%lf",a[i].s,&a[i].x,&a[i].y,&a[i].z); a[i].x=a[i].x*b; a[i].y=a[i].y*aa; a[i].z=a[i].z*c; a[i].sum=a[i].x+a[i].y+a[i].z; } sort(a,a+n,cmp); printf("Case #%d:\n",++tt); for(int i=0;i<n;i++) { printf("%s %.4lf %.4lf %.4lf %.4lf\n",a[i].s,a[i].sum,a[i].x,a[i].y,a[i].z); } } return 0;}
E
这是本次比赛中最难的一个题,难点在于把给定的字符串转化成一系列数字,但是问题在于,转化成的数字已经暴了longlong我们只有用字符串来表示数,这道题其实是对利用sort对字符串排序的考查。如果你比赛中没做出来,希望你能好好看看标程,把他弄懂,我的做法是把字符串放在结构体中,再进行结构体排序。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{ char s[110];}nt[1010];bool cmp(node a,node b){ int alen=strlen(a.s),blen=strlen(b.s); if(alen<blen) { return true; } else if(alen>blen) { return false; } else { if(strcmp(a.s,b.s)<0) { return true; } else { return false; } }}int main(){ //freopen("g:\\data.in", "r", stdin); //freopen("g:\\data.out", "w", stdout); char s[1010],st[110]; memset(st,0,sizeof(st)); while(scanf("%s",s)!=EOF) { int len=strlen(s); int k=0,tlen=0; for(int i=0;i<=len;i++) if(i==len||s[i]=='5') { if(tlen==0) continue; int d=0; for(d=0;d<tlen-1;d++) if(st[d]!='0') { break; } strcpy(nt[k++].s,st+d); memset(st,0,sizeof(st)); tlen=0; } else { st[tlen++]=s[i]; } sort(nt,nt+k,cmp); printf("%s",nt[0].s); for(int i=1;i<k;i++) { printf(" %s",nt[i].s); } puts(""); } return 0;}
虽然题目对大家来说并不都是很容易,但相信经过一番冥思苦想后的豁然开朗,是做多少道水题都无法相比的。也祝大家在接下来的训练中取得好成绩!
0 0
- 2015年nefu寒假集训结构体排序专题解题报告
- SDUT - 2017年寒假集训 阶段测试赛3(个人) -- 解题报告
- SDUT - 2017年寒假集训 阶段测试赛3(组队) -- 解题报告
- 寒假集训第一天--结构体训练
- 17寒假集训_STL专题
- 2015年寒假集训专题--- 数据结构实验之栈:行编辑器
- nefu《2015综合训练9组队赛》解题报告
- 寒假集训作业(1)——结构体
- 寒假集训第一天——结构体
- SDUT_2015寒假集训_结构体练习_A-Milk
- SDUT_2015寒假集训_结构体练习_C-分类游戏
- SDUT_2015寒假集训_结构体练习_G-最终排名
- 2014-2015 HHUC 跨年二分专题 解题报告
- 搜索专题解题报告
- CUGBACM11级专题训练之排序解题报告
- 集训第一周解题报告
- 2015 暑假集训14级第一周周赛解题报告
- 西南交大2011年第二次暑期集训比赛解题报告
- UNIX环境C语言编程(5)-系统数据文件
- fatjar地址
- fatjar地址
- Windows核心编程笔记(6)----用户模式下的线程同步
- fatjar地址
- 2015年nefu寒假集训结构体排序专题解题报告
- knowledge_based topic model - AMC
- 踢开Eclisep&Aptana,Emacs变身强大IDE
- 输入一个字符串,统计共有多少个整数并输出。
- fatjar插件地址
- Unity3D游戏开发之背包系统(三)
- 使用Ipython notebook 学习《Python for Data Analysis》 在win7下搭建注意事项
- Visual Studio自动添加引用
- 新浪微博平台架构