ACM_simple

合集下载

acm 算法模板 适合初学者使用

acm 算法模板 适合初学者使用

三角形面积计算 (1)字典树模板 (2)求线段所在直线 (5)求外接圆 (5)求内接圆 (6)判断点是否在直线上 (8)简单多边形面积计算公式 (8)stein算法求最大共约数 (9)最长递增子序列模板——o(nlogn算法实现) (9)判断图中同一直线的点的最大数量 (10)公因数和公倍数 (12)已知先序中序求后序 (12)深度优先搜索模板 (13)匈牙利算法——二部图匹配BFS实现 (15)带输出路径的prime算法 (17)prime模板 (18)kruskal模板 (19)dijsktra (22)并查集模板 (23)高精度模板 (24)三角形面积计算//已知三条边和外接圆半径,公式为s = a*b*c/(4*R)double GetArea(double a, double b, double c, double R){return a*b*c/4/R;}//已知三条边和内接圆半径,公式为s = prdouble GetArea(double a, double b, double c, double r){return r*(a+b+c)/2;}//已知三角形三条边,求面积double GetArea(doule a, double b, double c){double p = (a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c));}//已知道三角形三个顶点的坐标struct Point{double x, y;Point(double a = 0, double b = 0){x = a; y = b;}};double GetArea(Point p1, Point p2, Point p3){double t =-p2.x*p1.y+p3.x*p1.y+p1.x*p2.y-p3.x*p2.y-p1.x*p3.y+p2.x*p3.y;if(t < 0) t = -t;return t/2;}字典树模板#include <stdio.h>#include <string.h>#include <memory.h>#define BASE_LETTER 'a'#define MAX_TREE 35000#define MAX_BRANCH 26struct{int next[MAX_BRANCH]; //记录分支的位置int c[MAX_BRANCH]; //查看分支的个数int flag; //是否存在以该结点为终止结点的东东,可以更改为任意的属性}trie[MAX_TREE];int now;void init(){now = 0;memset(&trie[now], 0, sizeof(trie[now]));now ++;}int add (){memset(&trie[now], 0, sizeof(trie[now]));return now++;}int insert( char *str){int pre = 0, addr;while( *str != 0 ){addr = *str - BASE_LETTER;if( !trie[pre].next[addr] )trie[pre].next[addr] = add();trie[pre].c[addr]++;pre = trie[pre].next[addr];str ++;}trie[pre].flag = 1;return pre;}int search( char *str ){int pre = 0, addr;while( *str != 0 ){addr = *str - BASE_LETTER;if ( !trie[pre].next[addr] )return 0;pre = trie[pre].next[addr];str ++;}if( !trie[pre].flag )return 0;return pre;}pku2001题,源代码:void check( char *str ){int pre = 0, addr;while(*str != 0){addr = *str - BASE_LETTER;if( trie[pre].c[addr] == 1) {printf("%c\n", *str);return;}printf("%c", *str);pre = trie[pre].next[addr];str ++;}printf("\n");}char input[1001][25];int main(){int i = 0,j;init();while(scanf("%s", input[i]) != EOF){getchar();insert(input[i]);i++;}for(j = 0; j < i; j ++){printf("%s ", input[j]);check(input[j]);}return 0;}求线段所在直线//*****************************线段所在的直线struct Line{double a, b, c;};struct Point{double x, y;}Line GetLine(Point p1, Point p2){//ax+by+c = 0返回直线的参数Line line;line.a = p2.y - p1.y;line.b = p1.x - p2.x;line.c = p2.x*p1.y - p1.x*p2.y;return line;}求外接圆//***************已知三角形三个顶点坐标,求外接圆的半径和坐标********************struct Point{double x, y;Point(double a = 0, double b = 0){x = a; y = b;}};struct TCircle{double r;Point p;}double distance(Point p1, Point p2){return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));}double GetArea(doule a, double b, double c){double p = (a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c));}TCircle GetTCircle(Point p1, Point p2, Point p3){double a, b, c;double xa,ya, xb, yb, xc, yc, c1, c2;TCircle tc;a = distance(p1, p2);b = distance(p2, p3);c = distance(p3, p1);//求半径tc.r = a*b*c/4/GetArea(a, b, c);//求坐标xa = p1.x; ya = p1.b;xb = p2.x; yb = p2.b;xc = p3.x; yc = p3.b;c1 = (xa*xa + ya*ya - xb*xb - yb*yb)/2;c2 = (xa*xa + ya*ya - xc*xc - yc*yc)/2;tc.p.x = (c1*(ya-yc) - c2*(ya-yb))/((xa-xb)*(ya-yc) - (xa-xc)*(ya-yb)); tc.p.y = (c1*(xa-xc) - c2*(xa-xb))/((ya-yb)*(xa-xc) - (ya-yc)*(xa-xb));return tc;}求内接圆struct Point{double x, y;Point(double a = 0, double b = 0){x = a; y = b;}};struct TCircle{double r;Point p;}double distance(Point p1, Point p2){return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));}double GetArea(doule a, double b, double c){double p = (a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c));}TCircle GetTCircle(Point p1, Point p2, Point p3){double a, b, c;double xa,ya, xb, yb, xc, yc, c1, c2, f1, f2;double A,B,C;TCircle tc;a = distance(p1, p2);b = distance(p3, p2);c = distance(p3, p1);//求半径tc.r = 2*GetArea(a, b, c)/(a+b+c);//求坐标A = acos((b*b+c*c-a*a)/(2*b*c));B = acos((a*a+c*c-b*b)/(2*a*c));C = acos((a*a+b*b-c*c)/(2*a*b));p = sin(A/2); p2 = sin(B/2); p3 = sin(C/2);xb = p1.x; yb = p1.b;xc = p2.x; yc = p2.b;xa = p3.x; ya = p3.b;f1 = ( (tc.r/p2)*(tc.r/p2) - (tc.r/p)*(tc.r/p) + xa*xa - xb*xb + ya*ya - yb*yb)/2;f2 = ( (tc.r/p3)*(tc.r/p3) - (tc.r/p)*(tc.r/p) + xa*xa - xc*xc + ya*ya - yc*yc)/2;tc.p.x = (f1*(ya-yc) - f2*(ya-yb))/((xa-xb)*(ya-yc)-(xa-xc)*(ya-yb)); tc.p.y = (f1*(xa-xc) - f2*(xa-xb))/((ya-yb)*(xa-xc)-(ya-yc)*(xa-xb));return tc;}判断点是否在直线上//**************判断点是否在直线上********************* //判断点p是否在直线[p1,p2]struct Point{double x,y;};bool isPointOnSegment(Point p1, Point p2, Point p0){//叉积是否为0,判断是否在同一直线上if((p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y) != 0)return false;//判断是否在线段上if((p0.x > p1.x && p0.x > p2.x) || (p0.x < p1.x && p0.x < p2.x)) return false;if((p0.y > p1.y && p0.y > p1.y) || (p0.y < p1.y && p0.y < p2.y)) return false;return true;}简单多边形面积计算公式struct Point{double x, y;Point(double a = 0, double b = 0){x = a; y = b;}};Point pp[10];double GetArea(Point *pp, int n){//n为点的个数,pp中记录的是点的坐标int i = 1;double t = 0;for(; i <= n-1; i++)t += pp[i-1].x*pp[i].y - pp[i].x*pp[i-1].y;t += pp[n-1].x*pp[0].y - pp[0].x*pp[n-1].y;if(t < 0) t = -t;return t/2;}stein算法求最大共约数int gcd(int a,int b){if (a == 0) return b;if (b == 0) return a;if (a % 2 == 0 && b % 2 == 0) return 2 * gcd(a/2,b/2); else if (a % 2 == 0) return gcd(a/2,b);else if (b % 2 == 0) return gcd(a,b/2);else return gcd(abs(a-b),min(a,b));}最长递增子序列模板——o(nlogn算法实现)#include <stdio.h>#define MAX 40000int array[MAX], B[MAX];int main(){int count,i,n,left,mid,right,Blen=0,num;scanf("%d",&count); //case的个数while(count--){scanf("%d",&n); //每组成员的数量Blen = 0;for(i=1;i<=n;i++)scanf("%d",&array[i]); //读入每个成员for(i=1;i<=n;i++){num = array[i];left = 1;right = Blen;while(left<=right){mid = (left+right)/2;if(B[mid]<num)left = mid+1;elseright = mid-1;}B[left] = num;if(Blen<left)Blen++;}printf("%d\n",Blen);//输出结果}return 1;}判断图中同一直线的点的最大数量#include <iostream>#include <cstdio>#include <memory>using namespace std;#define MAX 1010 //最大点的个数struct point{int x,y;}num[MAX];int used[MAX][MAX*2]; //条件中点的左边不会大于1000,just equal MAX int countN[MAX][MAX*2];#define abs(a) (a>0?a:(-a))int GCD(int x, int y){int temp;if(x < y){temp = x; x = y; y = temp;}while(y != 0){temp = y;y = x % y;x = temp;}return x;}int main(){int n,i,j;int a,b,d,ans;while(scanf("%d", &n)==1){//initeans = 1;memset(used, 0, sizeof(used));memset(countN, 0, sizeof(countN));//readfor(i = 0; i < n; i++)scanf("%d%d", &num[i].x, &num[i].y);for(i = 0; i < n-1; i++){for(j = i+1; j < n; j++){b = num[j].y-num[i].y;a = num[j].x-num[i].x;if(a < 0) //这样可以让(2,3)(-2,-3)等价{a = -a; b = -b;}d = GCD(a,abs(b));a /= d;b /= d; b += 1000;//条件中点的左边不会大于1000if(used[a][b] != i+1){used[a][b] = i+1;countN[a][b] = 1;}else{countN[a][b]++;if(ans < countN[a][b])ans = countN[a][b];}}//for}//forprintf("%d\n", ans+1);}return 0;}公因数和公倍数int GCD(int x, int y){int temp;if(x < y){temp = x; x = y; y = temp;}while(y != 0){temp = y;y = x % y;x = temp;}return x;}int beishu(int x, int y){return x * y / GCD(x,y);}已知先序中序求后序#include <iostream>#include <string>using namespace std;string post;void fun(string pre, string mid){if(pre == "" || mid == "") return;int i = mid.find(pre[0]);fun(pre.substr(1,i), mid.substr(0,i));fun(pre.substr(i+1, (int)pre.length()-i-1), mid.substr(i+1, (int)mid.length()-i-1));post += pre[0];}int main(){string pre, mid;while(cin >> pre){cin >> mid;post.erase();fun(pre, mid);cout << post << endl;}return 0;}深度优先搜索模板int t; //t用来标识要搜索的元素int count; //count用来标识搜索元素的个数int data[m][n]; //data用来存储数据的数组//注意,数组默认是按照1……n存储,即没有第0行//下面是4个方向的搜索,void search(int x, int y){data[x][y] = *; //搜索过进行标记if(x-1 >= 1 && data[x-1][y] == t){count++;search(x-1,y);}if(x+1 <= n && data[x+1][y] == t){count++;search(x+1,y);}if(y-1 >= 1 && data[x][y-1] == t){count++;search(x,y-1);}if(y+1 <= n && data[x][y+1] == t){count++;search(x,y+1);}}//下面是8个方向的搜索void search(int x, int y){data[x][y] = *; //搜索过进行标记if(x-1 >= 1){if(data[x-1][y] == t){count++;search(x-1,y);}if(y-1 >= 1 && data[x-1][y-1] == t) {count++;search(x-1,y-1);}if(y+1 <= n && data[x-1][y+1] == t) {count++;search(x-1,y+1);}}if(x+1 <= n){if(data[x+1][y] == t){count++;search(x+1,y);}if(y-1 >= 1 && data[x+1][y-1] == t) {count++;search(x+1,y-1);}if(y+1 <= n && data[x+1][y+1] == t) {count++;search(x+1,y+1);}}if(y-1 >= 1 && data[x][y-1] == t){count++;search(x,y-1);}if(y+1 <= n && data[x][y+1] == t){count++;search(x,y+1);}}匈牙利算法——二部图匹配BFS实现//匈牙利算法实现#define MAX 310 //二部图一侧顶点的最大个数int n,m; //二分图的两个集合分别含有n和m个元素。

杭电acm题目水题英文题目、翻译及ac源代码

杭电acm题目水题英文题目、翻译及ac源代码

1040 As Easy As A+BTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 26015 Accepted Submission(s): 11054Problem DescriptionThese days, I am thinking about a question, how can I get a problem as easy as A+B? It is fairly difficulty to do such a thing. Of course, I got it after many waking nights.Give you some integers, your task is to sort these number ascending (升序).You should know how easy the problem is now!Good luck!InputInput contains multiple test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case contains an integer N (1<=N<=1000 the number of integers to be sorted) and then N integers follow in the same line.It is guarantied that all integers are in the range of 32-int.OutputFor each case, print the sorting result, and one line one case.问题描述这些天来,我在思考一个问题,我怎样才能得到一个简单的问题,因为A + B?这是相当困难做这样的事情。

ACM(lecture_10)特殊的数

ACM(lecture_10)特殊的数
空间 换 时间!!
2021/6/3
26
Catalan number
2021/6/3
27
HDOJ_1134: Game of Connections
8 7 6
5
1 2 3
4
2021/6/3
28
Catalan Number
Catalan numbers (1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, ...)
trees with n+1 nodes
3 nodes:
2021/6/3
37
4 nodes: 5 nodes:
2021/6/3
38
4. the number of paths of length 2n through an n-
by-n grid that do not rise above the main diagonal
2021/6/3
6
January
2021/6/3
7
February
2021/6/3
8
March
2021/6/3
9
April
2021/6/3
10
May、June…
???
2021/6/3
11
The number series is—— 1、1、2、3、5… This is fibonacci number!
Some other pictures
2021/6/3
12
2021/6/3
13
2021/6/3
14

清华大学ACM题解

清华大学ACM题解
{
if (k==n){ //Output permutation.
for (int i-1; i<n; i++) cout<<a[i]<<" ";
}
else //a[k:n] has more than one permutation.
// Generate these recursively.
{
int a[3] = {1, 2, 3};
Perm(a, 0, 3);
return 0;
}
该程序的运行结果为
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
那么,该函数就完成了对一个数组进行全排列的操作
下面,分析该程序,我用圆圈代表每次函数的调用
对于数据的输入和输出有几道练习题
/showproblem.php?pid=1089

/showproblem.php?pid=1096
二、算法基础
1. 什么是算法
算法是完成特定任务的有限指令集。所有的算法必须满足下面的标准:
编辑源文件
能够提共管理程序开发的所有步骤,包括编辑的程序成为集成开发环境(integrated development evironments, IDE)。在windows系统下,使用较为广泛的有Microsoft Visual C++、Dev-Cpp等,在UNIX系统下,有Vim、emacs、eclipes等。这些程序都能提供一个较好的开发平台,使我们能够方便的开发一个程序,接下我们所要了解的都是标准C++,所有源代码都在Dev-cpp下编写,能够编译通过。

16个ACM经典算法介绍

16个ACM经典算法介绍

16个ACM经典算法介绍1.深度优先(DFS)DFS是一种递归的算法,用于遍历或图、树或状态空间。

它从起始节点开始遍历,然后沿着一条路径一直遍历到最深处,然后回溯到上一个节点,继续遍历其他路径。

2.广度优先(BFS)BFS也是一种遍历算法,但与DFS不同的是,它先遍历当前节点的所有相邻节点,然后再遍历相邻节点的相邻节点,以此类推。

BFS通常使用队列数据结构,先进先出。

3. 迪杰斯特拉算法 (Dijkstra's Algorithm)迪杰斯特拉算法用于求解带权图中的最短路径问题。

它采用贪心策略,每次选择当前节点到其他节点的最短路径,从起始节点开始逐步扩展,直到到达目标节点。

4. 弗洛伊德算法 (Floyd's Algorithm)弗洛伊德算法用于求解图中所有节点之间的最短路径。

它采用动态规划的思想,通过不断更新节点之间的最短路径,最终求得所有节点之间的最短路径。

5. 快速排序 (Quick Sort)快速排序是一种高效的排序算法,它通过选择一个基准元素,将待排序列表划分为左右两部分,左边部分都小于基准元素,右边部分都大于基准元素,然后对左右两部分分别递归地进行排序。

6. 归并排序 (Merge Sort)归并排序是一种稳定的排序算法,它将待排序列表分成长度相等的两部分,然后分别对这两部分进行排序,最后将排序好的两部分再合并成一个有序列表。

7. 堆排序 (Heap Sort)堆排序利用二叉堆数据结构实现,它将待排序列表看作是一颗完全二叉树,利用堆的性质对其进行排序。

8. Prim算法 (Prim's Algorithm)Prim算法用于求解最小生成树问题,它从一个节点开始,然后逐步扩展,每次选择当前节点到其他节点的最小权值边,直到生成一棵包含所有节点的树。

9. Kruskal算法 (Kruskal's Algorithm)Kruskal算法也用于求解最小生成树问题,它通过对所有边按权重从小到大进行排序,然后逐步加入图中,直到生成一棵包含所有节点的树。

(lecture_01)初识ACM_20070925_simplePPT精品文档71页

(lecture_01)初识ACM_20070925_simplePPT精品文档71页
20 08.01.2020
ACM题目特点:
由于ACM竞赛题目的输入数据和输出数 据一般有多组(不定),并且格式多种 多样,所以,如何处理题目的输入输出 是对大家的一项最基本的要求。这也是 困扰初学者的一大问题。
下面,分类介绍:
21 08.01.2020
先看一个超级简单的题目:
/showproblem.php?pid=108 9
Run Time Error -- 程序运行过程中出现非正常中断。
Time Limit Exceeded

-- 运行超过时限还没有得到输出结果。
Wrong Answer -- 答案错误。
Presentation Error

-- 输出格式不对,可检查空格、回车等等细节。
Accepted -- 恭喜恭喜!
7 08.01.2020
8 08.01.2020
ACM in HDU
2019年9月,第一次参加省赛(邀请赛)
2019年5月,浙江省“舜宇”杯首届大学生程序设计大赛
2019年11~12月,第29届ACM亚洲区北京和上海赛区比赛
2019年5月,浙江省第二届“舜宇”杯大学生程序设计大 赛
少参加4~5个赛区的比赛) 另外,每学期至少有三次月赛以及适当
的练习赛
10 08.01.2020
如何比赛? 3人组队
可以携带诸如书、手册、 程序清单等参考资料; 不能携带任何可用计算机处理的软件或数据、不 能携带任何类型的通讯工具;
可能收到的反馈信息包括:
Compile Error -- 程序不能通过编译。
现在,ACM / ICPC已成为世界各国大学生中最 具影响力的国际计算机赛事。(非官方)

ACM水题题目解析

ACM水题题目解析

2

项目设计
• 1. 输入四个整数 • 2. 求第一个数和第二个数的差,用p表示 • 3. 求第二个数和第三个数的差,用q表示 • 4. 若p与q相等,为等差数列,计算并输出该等差数 列的第五项 • 5. 若p与q不相等,为等比数列,计算并输出等比数 列的第五项
3
项目实现
main() { int i; int num[4]; int d; int q; for (i = 0; i < 4; ++i) { scanf("%d", num + i); printf("%d ", num[i]); } d = num[1] - num[0]; q = num[2] - num[1]; if (d == q) printf("%d\n", num[3] + d); else printf("%d\n", (int)(num[3] * (num[1] * 1.0 / num[0]))); }
4
项目运行
5
ACM
项目二——数字排序问题
项目构思:
• 已知一个从1到n的无序数组,我们可以两两互换数字 的方式为该数组排序,如数组2, 3, 5, 4, 1,可以通过 三次交换得到有序数组1,2,3,4,5 • 23541 13542 13245 12345 如上面的数组,要通过三次交换,得到有序数组。 • 编程实现:输入一个1到n的无序序列,计算该序列通 过交换数字得到有序序列的最少次数。
6
项目实现 #include <stdio.h> main() { int num[100]; int len; int count=0; int i,j,k,temp; printf("请输入要输入数字的个数:"); scanf("%d",&len); for(i=0;i<len;i++) { scanf("%d",&num[i]); } for(i=0;i<len-1;i++)//求最小值 { k=i; for(j=k+1;j<len;j++) { if(num[j]<num[k]) k=j; } if(i!=k) {

acm构造题

acm构造题

acm构造题ACM(ACM International Collegiate Programming Contest)是一项世界范围内的大学生竞赛活动,由国际计算机协会(ACM)主办。

该竞赛的目标是提高学生的计算机编程和问题解决能力。

其中,构造题是竞赛中的一类问题,需要选手根据给定的条件构造满足特定要求的解。

构造题的难点在于具有一定的复杂性和创造性,选手需要通过推理和巧妙的设计来构建出符合要求的解。

在本文中,我们将探讨ACM构造题的一般解题思路和技巧。

首先,构造题通常以描述为主,题目中会给出某些条件和要求,要求选手构建一个满足条件且符合要求的解。

因此,在解题过程中,我们首先需要仔细阅读题目,理解所给条件和要求。

其次,我们可以尝试从简单的特殊情况入手,通过构建特殊情况的解来发现问题的规律。

例如,如果题目要求构建一个特定形状的图形,我们可以先从最简单的形状开始,逐步扩展变化,以找到构造规律。

另外,我们还可以运用数学推理来解决构造题。

数学推理在ACM竞赛中起到了至关重要的作用。

选手可以通过数学推理,构造出满足要求的解,并证明其正确性。

在解题过程中,可以尝试运用数学的知识和技巧,如数学归纳法、递推关系等,从而构建出有效的解。

此外,对于构造题中的随机性要求,选手可以运用概率论的知识给出一个满足随机性要求的解。

通过合适的随机算法,可以构造出符合要求的解,并对其进行概率分析,以保证解的有效性和随机性。

在解决构造题时,选手还需注意一些常见技巧。

例如,尽量利用给定条件和限制条件,将问题简化为更易解决的子问题;利用较小的原始素材构造出较大的解;利用排除法来确定某些条件和要求。

总结起来,ACM构造题是一类需要选手充分运用逻辑思考和创造力的问题。

在解题过程中,我们需要细致地分析和理解题目的要求,通过推理、设计和数学推导等方法,构造出满足条件和要求的解。

通过多次练习和不断的思考,我们可以提高自己在ACM竞赛中解决构造题的能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重读题 算法问题 程序实现问题 放弃此题
参加ACM-ICPC的一些经验
ACM-ICPC比赛经验-注意细节

细节只能依靠平时积累。
参加ACM-ICPC的一些经验
ACM-ICPC比赛经验-注意细节
二分查找的过程: 用low表示下界,high表示上界 while (low<high) { mid=(low+high)/2; ………….. }

三大高手型——符文杰、张一飞、骆骥 缺点:容易造成各自为政的局面,队员之间过 于信任,交流较少。 当一人在算法上或题意理解上有错误时,不容 易发现问题,并且造成无效用的机器占用。当 比赛末期有若干题可以尝试解决时,难以抵抗 各司一题的诱惑,而实际结果往往是一无所获。
参加ACM-ICPC的一些经验
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中的组队模式

拖后中卫型 拖后中卫型队伍的理想发挥,需要简单题和难 题的数量分布较好。 然而这两年ACM的赛题,往往算法比较容易 想到,但实现有困难,有时要根据数据的情况 做算法优化或特殊处理,因此在很多时候拖后 中卫的实力不一定能得到充分的发挥。
团队合作能力的两个极端 抢键盘 一起敲键盘——Abacus.FDU
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中团队合作的提高

选择最合适的队员和组队模式 Online Contest
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中的组队模式

三大高手型 拖后中卫型 编程高手型

Final Standing 验题赛 Staff->Judger
Asia Beijing2006 Onsite的比赛过程
Asia Beijing 2006 Onsite的验题赛

Robot Animal Run Another Minimum Spanning Tree Connect It, If You Can! Guess XAR What a Special Graph Ruler A Funny Stone Game
ACM-ICPC竞赛中的组队模式


拖后中卫型 有一名队员担当拖后中卫的角色,比赛开始时 另两名队员正常做题,拖后中卫专攻难题。当 简单题差不多做完了,难题也想出算法了,比 赛成绩在解题数和时间上都会有优势。 这种模式保证有充分的时间研究难题,而三大 高手型的队伍,可能一开始每人都做简单题, 机器资源不够,而后来每人都想难题,机器资 源浪费。
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中的组队模式

三大高手型——符文杰、张一飞、骆骥 优点:充分发挥实力,充分利用资源。 一人敲程序时,另两人可以想算法,甚至提前 在纸上写程序框架。一题做毕换人就上,三人 轮流最大限度的使用计算机。
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中的组队模式
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中的组队模式

编程高手型 一名队员属编程高手,算法基础不错,简单题 完全可独当一面,更重要的是敲程序的速度和 准确度明显强于另两人。
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中的组队模式


编程高手型 这一模式的理想发挥是:程序基本都由编程高 手来敲,另两人负责想算法和把算法告诉高手。 由于高手主攻,所以基本不会造成三大高手型 各司一题的情况。 当面临若干选择时,往往高手可以决定,另两 人也容易接受和配合。由于高手的特点,这样 的队伍在比赛期间解题数量和时间都比较容易 取得优势地位。
IOI和ACM-ICPC的经历
IOI的比赛经历(2001-2002年)

2001年12月:NOIP2001 一等奖 2002年5月:ZJOI2002 第3名 2002年8月:NOI2002 三等奖
IOI和ACM-ICPC的经历
IOI的比赛经历(2002-2004年)

参加ACM-ICPC的一些经验
ACM-ICPC竞赛中个人能力的提高

个人能力的训练时间一般占总时间的: 约40%-99%
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中个人能力的提高

TopCoder
参加ACM-ICPC的一些经验
ACM-ICPC训练经验-TopCoder

/tc SRM,TCO,TCCC
Asia Beijing2006 Onsit Nhomakorabea的比赛过程
Asia Beijing 2006 Onsite的比赛过 程

Staff->Judger Problem A:Robot数据有问题
Asia Beijing2006 Onsite的比赛过程
题目的选择

Robot Animal Run Another Minimum Spanning Tree Connect It, If You Can! Guess XAR What a Special Graph Ruler A Funny Stone Game
参加ACM-ICPC的一些经验

ACM-ICPC竞赛中个人能力的提高 ACM-ICPC竞赛中团队合作能力的培养 ACM-ICPC的竞赛过程
个人能力 vs 团队合作



ACM-ICPC竞赛取得好成绩主要依靠的是两种 能力: 个人能力 团队合作
个人能力 vs 团队合作


ACM-ICPC竞赛取得好成绩主要依靠的是两种 能力: 个人能力:竞赛过程中的每道题目的解决最终 都需要选手的个人能力的支持
参加ACM-ICPC的一些经验
Online Contest

实践是检验真理的唯一标准
参加ACM-ICPC的一些经验
Online Contest

/JudgeOnline acm.uva.es/contest acm.timue.ru acm.sgu.ru ipsc.ksp.sk

队友:贝小辉,张宁 赛区选择: 成都赛区 北京赛区 杭州赛区
IOI和ACM-ICPC的经历
ACM-ICPC(2005-2006)

Asia-Beijing-On Site Contest Asia-Hangzhou-On Site Contest
IOI和ACM-ICPC的经历
ACM-ICPC
Tsinghua University ACRush
ACM-ICPC

自己IOI和ACM-ICPC的经历 参加ACM-ICPC的一些经验 Asia Beijing2006 Onsite的比赛过程
IOI和ACM-ICPC的经历
ACM-ICPC

自己IOI和ACM-ICPC的经历 参加ACM-ICPC的一些经验 Asia Beijing2006 Onsite的比赛过程
IOI和ACM-ICPC的经历
从IOI到ACM-ICPC

自己IOI和ACM-ICPC的经历 参加ACM-ICPC的一些经验 Asia Beijing 2006 Onsite的比赛过程
Asia Beijing2006 Onsite的比赛过程
Asia Beijing 2006 Onsite的比赛过 程
个人能力 vs 团队合作


ACM-ICPC竞赛取得好成绩主要依靠的是两种 能力: 团队合作:比赛过程是3个选手一起协作完成 的。只有好的合作才能有效发挥出每个选手的 特长。
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中个人能力的提高

个人能力一般包括: 思考算法的能力 编程的能力 debug的能力
ACM-ICPC训练经验-TopCoder

TopCoder允许的语言: C++ Java C# VB
参加ACM-ICPC的一些经验
ACM-ICPC训练经验-TopCoder

提高的编程速度 提高的正确率
参加ACM-ICPC的一些经验
ACM-ICPC竞赛中团队合作的提高

参加ACM-ICPC的一些经验
ACM-ICPC的排名方法

首先按照解决题目的数目 其次按照penalty time 再次按照通过最后的时间
参加ACM-ICPC的一些经验
ACM-ICPC比赛经验

比赛规则 Judger的习惯 比赛资料的准备
参加ACM-ICPC的一些经验
ACM-ICPC比赛经验-被卡住之后应对自如
参加ACM-ICPC的一些经验
ACM-ICPC训练经验-TopCoder

TopCoder时间紧凑 TopCoder比赛有丰厚的奖金
参加ACM-ICPC的一些经验
ACM-ICPC训练经验-TopCoder

C++ class STL,vector,string
参加ACM-ICPC的一些经验
2002年11月:NOIP2002 2003年5月:ZJOI2003 2003年8月:NOI2003 2004年1月:WC2004 2004年5月:CTSC2004 2004年8月:IOI2004
一等奖 第1名 一等奖 第1名 第1名 金牌
IOI和ACM-ICPC的经历
ACM-ICPC(2005-2006)
ACM-ICPC(2006-2007)

ACM-ICPC World Final 2007
参加ACM-ICPC的一些经验
ACM-ICPC

自己IOI和ACM-ICPC的经历 参加ACM-ICPC的一些经验 Asia Beijing2006 Onsite的比赛过程
相关文档
最新文档