acm 排序培训 夏天来了

2、题目描述:

Description

夏天来了~~好开心啊,呵呵,好多好多水果~~        Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.

Input

第一行正整数N(0<N<=10)表示有N组测试数据.        每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.

Output

对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.        两组测试数据之间有一个空行.最后一组测试数据之后没有空行.

Sample Input

1 5 apple shandong 3 pineapple guangdong 1 sugarcane guangdong 1 pineapple guangdong 3 pineapple guangdong 1

Sample Output

guangdong

|----pineapple(5)

|----sugarcane(1)

shandong

|----apple(3)

4、题目分析及知识点[重点]:

多层排序,以前还没有遇见过。。。

5、AC源代码:

#include<stdio.h>

#include<string.h>

int main()

{

struct out{

char name[90];

char prod[90];

int num;  }fru[120];

int T;

scanf("%d",&T);

while(T--)

{

int M,i,j=0,k,sign,num,temp3;   char name[90],prod[90],temp1[90],temp2[90];

scanf("%d",&M);

for(i=0;i<M;i++){

scanf("%s%s%d",name,prod,&num);

sign=0;

for(k=0;k<j;k++)

if(strcmp(fru[k].name,name)==0&&strcmp(fru[k].prod,prod)==0){

fru[k].num+=num;

sign=1;

}

if(sign==0){

strcpy(fru[j].name,name);

strcpy(fru[j].prod,prod);

fru[j].num=num;

j++;

}   }

k=j;

for(j=0;j<k-1;j++)

for(i=0;i<k-j-1;i++){

if(strcmp(fru[i].prod,fru[i+1].prod)>0){

strcpy(temp1,fru[i+1].prod);

strcpy(temp2,fru[i+1].name);

temp3=fru[i+1].num;

strcpy(fru[i+1].prod,fru[i].prod);

strcpy(fru[i+1].name,fru[i].name);

fru[i+1].num=fru[i].num;

strcpy(fru[i].prod,temp1);

strcpy(fru[i].name,temp2);

fru[i].num=temp3;

}

else if(strcmp(fru[i].prod,fru[i+1].prod)==0&&strcmp(fru[i].name,fru[i+1].name)>0){

strcpy(temp2,fru[i+1].name);

temp3=fru[i+1].num;

strcpy(fru[i+1].name,fru[i].name);

fru[i+1].num=fru[i].num;

strcpy(fru[i].name,temp2);

fru[i].num=temp3;

}    }  //实现字符串的交换。。。

for(i=0;i<k;i++){

if(i==0){

printf("%s\n",fru[i].prod);

printf("   |----%s(%d)\n",fru[i].name,fru[i].num);

}

else if(strcmp(fru[i].prod,fru[i-1].prod)==0)

printf("   |----%s(%d)\n",fru[i].name,fru[i].num);

else

{

printf("%s\n",fru[i].prod);

printf("   |----%s(%d)\n",fru[i].name,fru[i].num);

}   }

if(T!=0)

printf("\n");

}

return 0;

}

6、做题心得:

主要是两方面:

A、题复杂,可以分解成若干简单的题来做

B、控制格式,让人头疼啊。。。。

时间: 2024-12-04 20:27:17

acm 排序培训 夏天来了的相关文章

北大ACM暑期培训(1)——线段树,树状数组

本文出自:http://blog.csdn.net/svitter 今天ACM暑期实训开始了,今天讲述的内容是: 7.14  数据结构(一): 线段树,树状数组,二维线段树. 线段树:invertal tree (称为区间树更加合适) 作用:快速区间查询,用于解决区间统计的有关问题. 重点:同层节点不重叠. 每层最多有两个终止节点. 更新和进行区间分解的时间复杂度均为log(n); 方法:调用会多次使用递归更新插入查询: 空间:开空间的时候,一般情况下开4n大小,2*2log[n] - 1 <=

2019 ACM 排序

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2109 题意:简单的排序问题 代码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int n,a[101],b[101],i,A,B; while(scanf("%d",&n)!=EOF&&n) { me

“ACM学神来了”吴翼直播片段

Steve Rogers 2015-06-17 “ACM学神来了”第一期直播 嘉宾:吴翼 2013,2015年代表两大洲名校清华大学,加州伯克利参加ACM全球总决赛获得世界银牌,铜牌,北美冠军 原文地址: http://www.saikr.com/thread/index/363#3465 片段: MaxKrystal 2015-06-17 [ACM学神来了]请问吴翼大神,如果刷题的话,对于codeforces和topcoder您更推荐哪种呢?大概又要以什么方式刷?求解.赞(184) 回应(2)

acm学习指引

一般要做到50行以内的程序不用调试.100行以内的二分钟内调试成功.acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上. 下面给个计划练练: 第一阶段:练经典常用算法,下面的每个算法打上十到二十遍,同时自己精简代码.因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来. 1.最短路(Floyd.Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.

今夜,是时候对大学生活作个总结啦

大二,正在学习所有的基础课程,却是偏执的喜欢ACM,ACM这渣渣比赛可是没有考纲的,各种乱七八糟的数学定理,各种英语的阅读可是考试最热衷的东西,我却与他们不同:大一的走在迷茫的路上,大二的走在跟着老师学习基础的路上,大三的正在铺开自己的知识面,大四的正在网络攻防的世界游玩.可我,却依然坚持在每周六晚上的BC中来虐虐签到题,以示我仍然在ACM的世界里活着. 每天忙于学习课程和作业,每天的时间都是零碎的,每天的学习是没有计划的,每天刷的题依旧是水题,导致现在所有的ACM我只会开数组打表,暴力和搜索.

XDU-1043 Boooooom (概率DP)

1043: Boooooom 时间限制: 1 Sec  内存限制: 128 MB  Special Judge http://acm.xidian.edu.cn/problem.php?id=1043 [提交][状态][讨论版] 题目描述 Boom!UUZ发飙了.参加ACM的培训本应该有n个人,今天却只来了那么一点点.已知每个学生能来上课的概率为Pi(1≤i≤n),当上课人数少于k时,UUZ会发飙,一旦UUZ发飙,那么以后的课(包括这节课)就都不上了,而如果不发飙,则UUZ还会开下一节课.那么,

ACM——01排序

http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1024 01排序 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte总提交:708            测试通过:258 描述 将01串首先按长度排序,长度相同时,按1的个数多少进行排序,1的个数相同时再按ASCII码值排序. 输入 输入数据中含有一些01串,01串的长度不大于256个字符

[ACM] hdu 1285 确定比赛名次 (拓扑排序)

确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10358    Accepted Submission(s): 4046 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直

ACM:ASCII码排序

ASCII码排序:http://acm.nyist.net/JudgeOnline/problem.php?pid=4 绝不重新造轮子. #include<iostream> #include<string> #include<algorithm> using namespace std; int main() { int n = 0; cin >> n; for (int i = 0; i < n; ++i) //多次测试 { string str;