Welcome to Tongji Online Judge!
 
User ID:
Password:
Register
Home
FAQs
Web Board
 
Exercise Problems
Training Problems
Contest Problems
Submit Code
Judge Status
 
Register User
Authors Ranklist
Search User
 
Running Contests
Scheduled Contests
Past Contests


活动通知by zpyds 2012-05-09
本周六(5.12)下午13:00在嘉定电信学院203举办活动,届时将会讲解10年福州赛区题目。
题目链接:http://acm.hdu.edu.cn/search.php?field=problem&key=2011%20Asia%20Fuzhou%20Regional%20Contest%20&source=1&searchmode=source
敬请关注!

通知by zpyds 2012-04-23
有欲参加同济大学ACM暑假训练的,且满足以下要求 (服从组织安排 && 有时间 && 吃苦耐劳 && 校内赛满足要求) || (! 男生),请发送年级 + 姓名 + 专业至wideasYu@gmail.com

活动延期通知by zpyds 2012-04-17
因本周六活动与部分同学C++期中考试冲突,本周的活动改为周日(4.22)进行。

活动延期通知by zpyds 2012-04-10
因本周活动与USTC比赛冲突,本周的活动延期至下周六(4.21)进行

请现役队员参加USTC月赛
http://acm.ustc.edu.cn/ustcoj/contestlist.php

活动通知by zpyds 2012-04-09
时间:周六(4.14)上午 9:30

地点:嘉定校区电信楼203

内容:上午 吴俊介绍算法竞赛
     下午:吴宏讲解11年大连赛区题目

题目链接:http://acm.hdu.edu.cn/search.php?field=problem&key=2011%20Asia%20Dalian%20Regional%20Contest&source=1&searchmode=source

推荐看题顺序:DEICGBF..........

活动通知by zpyds 2012-04-06
请新老ACM队员请准时参加明天(4.7)下午13:00在嘉定电信学院203举办的活动,届时由10级刘跃同学讲一套区预赛题目,新入队同学根据自己情况进行分组。

明天讲解的题目参见:
http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=520

部分书面题解在liuyue的博客上:
http://euyuil.com/search/?keyword=2011%E6%88%90%E9%83%BD

同济大学第九届程序设计竞赛决赛排名by TOJAdmin 2012-03-25
决赛最终排名

感谢大家参与

同济大学第九届程序设计竞赛网络预赛须知by TOJAdmin 2012-03-23
网络预赛将于3月23日(周五)19:00—22:00在TOJ进行,以下几点说明:

    1.关于语言:可以使用C/C++, Java, FPC
    
    2.关于TOJ使用和多组数据的处理,可参考TOJ使用说明
    
    3.比赛时,不要频繁刷题,交题有10s的时间限制,即两次交题前后时间间隔至少为10s。
    
    4.比赛成绩将按解题数排名,解题数相同的队伍,按罚时排名(小的靠前),注意每次提交错误的话将多增加20分钟的罚时。
     
    5.比赛必须使用组委会提供的用户名和密码,无法登陆或者有其他问题可以咨询:69589357。
    
    6.比赛地址

同济大学第九届程序设计竞赛须知by zpyds 2012-03-18
本日志由ACM队08级学长CJY友情提供,针对不了解ACM/ICPC的同学提供帮助。

C/C++

1. I/O
    
    Online Judge通常使用的是标准输入/输出,所以在比赛时通常要加上以下几行:

    #include<stdio.h>     //标准c输入/输出

    #include<string.h>    //字符串操作

    #include<iostream>    //标准c++输入/输出

    #include<iomanip>     //标准C++的I/O manipulator(操纵器?)

    using namespace std;  //使用std命名空间

     
    本节只讨论double,int,long long,char的输入输出,字符串到下节再讨论。

    对于stdio.h,使用的输入是 int scanf( const char *format, ... );

                 使用的输出是 int printf( const char *format, ... );

    其中,字符串format存的是由输出到屏幕的字符串和格式控制符组成的。具体实例见下:

    int main()

    {

        int a,b;

        while(scanf("%d%d",&a,&b)!=EOF)   //多组数据,读入两个整数a,b,返回值为EOF时退出;

        printf("%d\n",a+b);               //输出结果a+b;

    }

        
    下面给出常用的格式控制符:

        %d     |   int型变量;

        %lf    |   double型变量;

        %.Xf   |   X是一个整数,在double型变量输出的时候表示输出小数点后几位小数;

        %c     |   char型变量;

        %I64   |   long long型变量(64位整数)

        %lld   |   也是long long型变量,不过有的OJ可能不认

    对于转义字符的话,本次比赛有用的似乎就是 \n (表示换行)了吧 。


    对于iostream的话,使用的输入是cin>>....

                      使用的输出是cout>>....
 
    对于上面的实例,使用C++的方法是这样写的:

        int main()

        {

            int a,b;

            while(cin>>a>>b)   //多组数据,读入两个整数a,b,读完退出;

            cout<<a+b<<endl;       //输出结果a+b,endl表示换行;

        }

    对于double的输出,命令通常是这样写的:

        double a;

        int X=3;

        cout<<setiosflags(ios::fixed)<<setprecision(X)<<a<<endl;    // X表示的是小数点后保留几位;

    和C相比,C++的输入/输出会比C“方便”许多。但是,C++的输入输出会比C慢,如果遇到Time Limit Exceeded 的话,在没有好的算法优化的情况下可以尝试使用C进行输入/输出。


2. string

    C和C++的字符串是不一样的。C的话通常使用的是 char* 和 char。具体的使用可以看下面的实例:

        char s000];

        int main()

        {

            scanf("%s",&s);  //读入一个字符串s,遇到空格或者换行符时停止;("%s"为字符串的格式控制符)

            gets(s);         //读入一行字符;

            printf("%s",s);  //输出一个字符串;

            puts(s);         //将字符串输出在一行上;

            return 0;

        }

        
    字符串的输入输出常用的大概就上面几句了。下面给几个常用的命令:

        double atof( const char *str );     |          把字符串转成double型变量;

        int atoi( const char *str );        |          把字符串转成int型变量;

        void *memcpy( void *to,

        const void *from, size_t count );   |          把字符串from拷贝count个字符到字符串to。也可用于数组。

        void* memset( void* buffer,

        int ch, size_t count );             |          初始化 buffer ,初始值 ch ,大小count;

        size_t strlen( char *str );         |          求字符串的长度,用int存就可以了;


    C++的字符串通常使用string。具体实例见下:

        int main()

        {

            string s;

            cin>>s;              //读入一个字符串,遇到换行符或者空格停止;

            getline( cin , s );  //读入一行字符串;

            cout<<s<<endl;       //输出字符串;

        }

    如果我没记错的话string其实是个类,所以各种功能的使用就是用类的写法(比如 s.length() )。下面给出几个常用的函数:

        string& append( const string& str );                     |          在字符串末尾增加字符串str,其实可以直接用+;

        void clear();                                            |          清空字符串;

        size_type length() const;                                |          字符串长度;

        size_type find( const string& str, size_type index );    |          在字符串str中查找字符;

    还有很多函数和STL的那几种数据结构用法基本相同,在这就不多说了。


3. math & algorithm

    对于没有参加算法类竞赛经验的同学经常能碰到这种情况:能想出巧妙的算法,但是由于一些最基础的函数无法实现,导致最后无法AC或者浪费很多时间。其实C和C++提供了很多数学函数以及算法,在比赛的时候可以直接调用。

    首先,如果要调用这些函数,我们一般要调用以下的头文件:

        #include<math.h>        //数学库头文件

        #include<stdlib.h>        //标准库头文件

        #include<algorithm>    //算法库头文件

    对于math.h,通常使用的是下面几个函数:

        double asin( double arg );                        |            求arc sin,acos和atan调用与其类似;

        double sin( double arg );                         |            求sin,cos和tan调用与其类似;

        double exp( double arg );                         |            自然对数e的arg次幂

        double fabs( double arg );                        |            绝对值函数

        double log( double num );                         |            自然对数e为底的log值

        double sqrt( double num );                        |            根号

        double pow( double base, double exp );            |            base的exp次幂

    对于stdlib.h而言,在比赛中通常可能使用到的就是qsort和rand了。

        qsort定义如下:

        void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );

    buf是待排序的数组,num是待排序项数,size是每一项大小,compare是比较函数指针。下面是C++ STL Reference的实例,介绍qsort是怎么使用的:

        int compare_ints( const void* a, const void* b )

        {

            int* arg1 = (int*) a;

            int* arg2 = (int*) b;

            if( *arg1 < *arg2 ) return -1;

            else if( *arg1 == *arg2 ) return 0;

            else return 1;

        }

        int array = { -2, 99, 0, -743, 2, 3, 4 };

        int array_size = 7;

        ...

        printf( "Before sorting: " );
        
        for( int i = 0; i < array_size; i++ )

        {

            printf( "%d ", array[i] );

        }

        printf( "\n" );

        qsort( array, array_size, sizeof(int), compare_ints );

        printf( "After sorting: " );

        for( int i = 0; i < array_size; i++ ) { printf( "%d ", array[i] ); }

        printf( "\n" );

    rand是求伪随机数函数。虽然在ACM/ICPC中多数问题可以使用不需要随机数的算法解决,但是随机调整的算法在一些情况下还是能活得不错的效果。在调用rand前需要调用srand初始化随机函数。下面是使用rand的一个实例:

        #include<time.h>

        #include<stdlib.h>

        int main()

        {

            srand(time(NULL)); //以时间作为随机种子

            int a=rand();  //获得一个随机数

            return 0;

        }

    Algorithm里面有很多算法,而且大部分函数如果自己实现其实并不复杂。这里就介绍新手经常会感到困扰的排序和二分查找。而排序和二分在某些算法的预处理或者某些步骤中可以起到画龙点睛的作用,二分的思想经常被使用在算法的优化中,如果是没有算法比赛经验且对算法几乎没有了解的同学,我建议在比赛前收集算法入门教材,看懂书上描述算法的流程和符号,同时理解二分思想。

    排序使用的函数是sort,它使用的是Introsort,一种改进的快排,最坏情况也能达到O(N log N)。它的具体形式如下:

        void sort( iterator start, iterator end, StrictWeakOrdering cmp );

    start是其实元素,end是终止元素,cmp是比较函数。比较函数其实作用类似<号,可以直接通过重载而使该参数缺省。sort函数可以作用于容器,当然对于容器的使用就不是这里普及的内容了,想速成的可以直接看C++ STL Reference,想带到现场赛做参考的话建议Essential C++。下面给出一个直接对数组排序的实例:

        #include<stdlib.h>

        #include<algorithm>

        struct node

        {

            int node,val;

        };

        bool cmp(node a,node b)  //判别函数,返回值为真表示a排在b前面。

        {

            if (a.val<b.val) return true;

            retutrn false;

        }

        int main()

        {

            node a[3];

            a[0].node=a[0].val=1;

            a[1].node=a[1].val=2;

            a[2].node=a[2].val=3;

            sort(a,a+3,cmp);  // +3的话,不想深究的同学直接看成待排序的数组长度好了。

            return false;

        }

    二分搜索是其实是在一个有序数组中查找某个数是否存在。具体形式如下:

        bool binary_search( iterator start, iterator end, const TYPE& val, Comp f );

    如果在start到end之间存在值val,那么就返回true;否则返回false。


    注:由于现场赛可携带纸质资料,参加现场赛的同学不妨可以打印一份。

2012年第九届同济大学大学生程序设计竞赛公告by zpyds 2012-03-13
一、竞赛宗旨
  本次同济大学大学生程序设计竞赛的宗旨是:借助竞赛普及计算机程序设计活动,提高大学生计算机程序设计水平和运用计算机分析问题、解决问题的能力。此次校内竞赛也将为我校组队参加第37届ACM国际大学生程序设计竞赛亚洲区预选赛选拔队员、锻炼队伍。
二、竞赛方式及要求
  1、竞赛要求:
  选手以2人组队形式参赛,面向我校所有本科生,专业、年龄不限。比赛期间,允许使用各种纸质参考资料,不允许携带任何电子设备及电子文档。参赛人员不得抄袭他人的程序,一旦发现程序雷同,取消成绩。题目为中文。
  2、报名方式:
  本次竞赛采用网上报名的方式。
  请到kejijie2012@126.com下载报名表,密码为woyaobaoming,并发送报名邮件到指定信箱 tjdxxsb@163.com;邮件标题注明“2012年程序设计竞赛报名”;邮件中注明【学号、姓名、院系、专业、联系电话、电子邮件、所在校区】; 可以自行组队后报名,也可以以个人名义报名(由组委会协助组队)。以收到大赛组委会“回复确认信”的方式确认报名成功。
  3、报名时间:  2012年3月12日——2012年3月19日
  4、网络练习时间:2012年3月19日——2012年3月23日
  5、网络预赛时间:2012年3月23日19:00—22:00
  6、热身赛时间: 2012年3月25日9:30—11:30(嘉定计算机中心)
  7、竞赛时间:  2012年3月25日13:00—18:00 (嘉定计算机中心)
三、竞赛奖励
  为表彰和鼓励在竞赛中获奖的同学,本竞赛拟设立以下奖项:
         一等奖:   5组         
         二等奖:   10组        
         三等奖:   20组        
         最佳女生组: 1组(可以兼得)
  参赛人员均可获得由学校颁发的荣誉证书。获一、二等奖的同学可加入同济大学ACM集训队,所获奖项可计入队内积分,并有机会入选学校代表队代表同济大学于2012年下半年参加第37届ACM国际大学生程序设计大赛亚洲区比赛。
  
                          第九届同济大学程序设计竞赛组委会
                              2012年3月6日  

[>] [>>]

Designed by firepot @ Tongji University.

2007-2012 All Rights Reserved.