程序设计实践课
来源:互联网 发布:数据侠客行 下载 编辑:程序博客网 时间:2024/05/24 06:13
今天的程序设计实践课,一佳学长现场演示了上次huffman的问题,写的是个简洁、飘逸啊,指针用的是个灵活。。。同步敲的代码如下,由于一些地方没跟上,所以可能略有些不同:
#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>using namespace std;const int N = 10050;struct node{ int value; node *left,*right; bool operator< (const node b)const { return value < b.value; }};node leaves[ N ], inner[ N ]; //名字起的很直白,一看就懂 int readString(){ //读入的处理,额,一般我习惯scanf %s这么处理。。。 int ret = 0; char ch; while( (ch = getchar()) !=' ' ) ret++; return ret - 1;}int preOrder( node *now, int depth ){ //将树遍历一遍,求出答案 if( now == NULL ) return 0; else { if( now -> left == NULL && now -> right ==NULL ) { return depth * now -> value; } else { return preOrder( now -> right, depth + 1) + preOrder( now -> left, depth + 1); } }}int main(){ int n; while( scanf( "%d", &n ) == 1){ int ans1 = 0; for( int i = 0; i < n; i ++){ int len = readString(); scanf( "%d", &leaves[ i ].value); leaves[ i ].left = NULL; leaves[ i ].right = NULL; ans1 = ans1 + len * leaves[ i ].value; } if( n == 1 ) { printf( "%d %d\n", ans1,leaves[ 0 ].value); continue; } sort( leaves , leaves + n); int now = 0, head = 0, tail = 0; for( int i = 1; i < n; i++){ node *minValue, *secMinValue; if( head == tail || (now < n && leaves[ now ] < inner[ head ] )) { minValue = leaves + now; now ++; } else { minValue = inner + head; head ++; } if( head == tail || (now < n && leaves[ now ] < inner[ head ] )) { secMinValue = leaves + now; now ++; } else { secMinValue = inner + head; head ++; } inner[ tail ].value = minValue -> value + secMinValue -> value; inner[ tail ].left = minValue; inner[ tail ].right = secMinValue; tail ++; } node * root = inner + head; printf("%d %d\n",ans1, preOrder( root, 0)); } return 0;}
然后呢,我又模仿这个样子,写了stoneI,虽然题很水,但是模仿着1+学长写的很是有条有理,哈哈,贴代码:
#include <iostream> using namespace std;const int N = 100010;int a[N],b[N];int main(){ int t; scanf("%d",&t); while(t--) { int n,ans=0,i; scanf("%d",&n); for(i=0;i<n ;i++) scanf("%d",a+i); sort(a,a+n); int now = 0, head = 0, tail = 0, minVal, secMinVal; for(i = 0; i < n - 1; i ++) { if( head == tail || ( now < n && a[ now ]< b[ head ])) { minVal = a[ now ]; now ++; } else { minVal = b[ head ]; head++; } if( head == tail || ( now < n && a[ now ]< b[ head ])) { secMinVal = a[ now ]; now ++; } else { secMinVal = b[ head ]; head++; } b[ tail++ ] = minVal + secMinVal; ans += minVal + secMinVal; } printf("%d\n",ans); } return 0;}
PS:又是件奇特的事,我照着1+学长抄的代码竟然在statistic里排第一,哈哈哈。。。
PS2:这个选修课我本来没有选,完全是蹭课去了,貌似我选的选修课都木有去听,类似于书非借不能读也。。。。
- 程序设计实践课
- 程序设计实践课的感受
- 程序设计实践
- 程序设计实践
- C++程序设计最佳实践
- C++程序设计最佳实践
- 程序设计实践(测试)
- 程序设计实践笔记---风格
- 程序设计实践7-----性能
- 程序设计实践(2)----算法
- 《程序设计实践》读书笔记一
- 关于程序设计实践
- 程序设计实践-规则汇编
- 01-《程序设计实践》第一章
- 三维系统程序设计实践
- 程序设计实践-规则汇编
- 程序设计实践----编程风格
- C++程序设计最佳实践
- 插入mssql数据库是问号
- 汇编
- POJ 3006 Dirichlet's Theorem on Arithmetic Progressions(我的水题之路——加i个d后的第几个素数)
- Building Coder(Revit 二次开发) - 只加载需要的族类型
- 用CAJViewer识别图片文字
- 程序设计实践课
- ycsb测试mongo笔记
- C++程序设计实验报告(一)
- Deadlock retry logic will not be implemented
- 关于浮动的前世今生
- apache的两种工作模式
- 关于MPEG-4的Comment读取
- C# 中的委托和事件 分类: .NET 接口+泛型+委托+继承
- Oracle 起步日记(12)——对象监测