求像北大百练POJ那样的提供程序设计题目的网站的网址,最好是中文的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求像北大百练POJ那样的提供程序设计题目的网站的网址,最好是中文的相关的知识,希望对你有一定的参考价值。

题目要有难度的,接近程序设计大赛的

Online Judge简称OJ,意思是在线评测平台,多指信息学在线评测平台。
知名的OJ有:RQNOJ,URAL,SPOJ,vijos,USACO,sgu,pku(poj),zju(toj),tju,uva等。
著名OJ网址:
中文OJ:
任青网络在线测评系统RQNOJ:http://www.rqnoj.cn/
高效信息学评测系统vijos: http://www.vijos.cn (2008.7.12复活)
英文OJ:
北京大学pku: http://acm.pku.edu.cn/OnlineJudge/ (most English)
美国官方USACO: http://ace.delos.com/usacogate/ (America, English)
南开大学nkpc: http://acm.nankai.edu.cn (most English)
浙江大学OJ:http://acm.zju.edu.cn/ (英语)
首先是国内比较老牌的知名OJ:
PKU/POJ(Peking University Judge Online For ACM/ICPC)
地址:
http://acm.pku.cn/JudgeOnline
介绍:
北京大学的题库,我主要在做的一个.题目数量很多,OJ的各项功能也很完善,而且还提供免费的OJ系统下载,可以利用提供的系统自己搭建OJ.题目数量很多,有几千道,但水题也很多.关于这一点,因为题目数量大,所以水题自然就多,但这不说明PKU的题目质量不高.PKU的难题还是不少的,而且做不做水题还是要由做题人自己决定的,和OJ无关.
推荐程度(最高10):
8
推荐做法:
如果是初学者或者仅仅想提高变成准确性,那么按照AC率做,保证1Y率;如果是有一定水平的OIer,可以每页完成40~50题;如果是大牛,那么尽量做吧;如果想专门训练某个项目,可以去网上搜pku题目分类,个人觉得pku里的dp题和数学题比较多.
ZJU/ZOJ(Zhejiang University Online Judge)
地址:
http://acm.zju.edu.cn/
介绍:
浙江大学的题库,国内起步最早的几个OJ之一.题目数量也接近2000.我没有太多的做zju的题目,所以不好说题目质量如何.OJ系统的友好性不如pku,但功能并不差.应该可以作为pku的替代品.
推荐程度:
7
推荐做法:
无(可以参考pku做法)
HOJ
地址:
http://acm.hit.edu.cn/ (网通代理http://acm-hit.sunner.cn)
介绍:
哈尔滨工业大学OJ,相对来说起步不早也不晚,曾经也涌现了许多大牛。现在题目数量接近3000,难度参差不起,由于学校开始重视其ACM,最近活动频繁。不过友好性较差,系统构建不是很完善,但功能不差。
推荐程度:
6
推荐做法:

然后是一些不太知名的或比较新的:
RQNOJ(RenQingNet Online Judge,任青网络信息学奥赛(OI)在线判题系统)
地址:
http://www.rqnoj.cn/
介绍:
RQNOJ经过了一年的时间逐渐的成熟起来,题目的数量也不断的增加,使用的用户数量也上升了不少,对于最近RQNOJ推出的一些新功能,很值得称赞。还有经常有一些比赛,可以去参加。
推荐程度:
7
推荐做法:
做一些有难度的题目
Vijos(Velocious Informatics Judge Online System)
地址:
http://www.vijos.cn/
介绍:
说到现在的OJ,就不得不提Vijos.Vijos是Vivian Snow(就是湖南师大附中的刘康,个人主页是http://www.viviansnow.cn/,现在似乎上不去了=.=)搞的一个Judge系统,本来是作为创新大赛作品的,后来就搞起来了,现在人气很旺.但是Vijos的各种事情很多,而且服务器不稳定,速度慢不说还时不时的关闭.关于Vijos的事情大家可以参考Dragon.Dai在Vijos的1周岁时候写下的这篇<Vijos的过去,现在和将来>(http://www.mybloop.com/get/376674/Vijos.doc),这里不再赘述.Vijos上所有人都可以上传自己的题目,虽然增加了很多灵活性,但由此导致的是题目水平参差不齐.而且上传题目的人在选择题目难度的时候很难做出同样的判断,都有自己的个人见解,所以本来题目难度是很好的一个设计,现在却成了鸡肋。从2007年末曾关闭维护了一段时间,现在已于2008.7.12复活。
推荐程度:
5
推荐做法:
用来测试竞赛原题,另外可以做一做AC率较低的题目.不推荐做大量的Vijos题目(yours牛别打我...).
TJU/TOJ(Tianjin University Online Judge)
地址:
http://acm.tju.edu.cn/toj
介绍:
可能大家都以为是同济的题库了吧=.=,其实这个是天津大学的,因为笔者是天津人,所以对这个OJ有独特的感情...虽然没怎么做过.总体来说比zoj稍差,题目质量不确定(我说了我没怎么做过...),一般我都用来做Contests.
推荐程度:
5
推荐做法:
无,可以做做Contests.注意是Online Contests而不是Virtual Contests,Virtual那个...打开就能知道,是利用TOJ自己的题库出Contests...其实这个设计很新颖,所有人都可以出测试.适合队内搞测验...
NKOJ(Nankai Online Judge)
地址:
http://acm.nankai.edu.cn/
介绍:
这个是天津市南开大学的OJ,想必大多数人都不知道吧?在看下面的介绍之前,你可以先上去看看,体会一下.你一定会发现,通过大量Ajax技术的应用,加上清新的界面,你会感到十分舒适.而且nkoj似乎有一个功能是自己不出现在Rank List和Status里面,这个功能很贴心.题目是nkoj最大的弱点,数量不大,质量一般.不过因为是中英文题目夹杂且中文题目数量不少(和pku比),所以想做中文题的除了Vijos也可以来这里看看.其实nkoj比vijos要漂亮的多,速度比vijos稍快,稳定性...应该比vijos好不少吧.
推荐程度:
5
推荐做法:
做中文题.
接下来说一下国外的OJ:
SGU(Saratov State University Online Contester)
地址:
http://acm.sgu.ru/
介绍:
sgu是俄罗斯斯坦福州立大学(大概是这个名字)的OJ,很老牌了.题目数量很少,但题题精炼,每做一道题都会让你的编程水平上升.在有一定编程水平之后可以试着做做,要争取做出每一道题.如果sgu能全部AC的话...那这个人不是抄袭就是神牛...注意status需要通过左边的"status online"链接来看,而且sgu速度稍慢并且不太稳定.总之是非常特别以及及其应该推荐的OJ.
推荐程度:
9
推荐做法:
AC每一道题,可以按照AC Rate来做.
Ural(Timus Online Judge)
地址:
http://acm.timus.ru/
介绍:
Ural是Ural State University的一个OJ,题目不是很多,但都是原创,而且比较经典.如果sgu做着费劲,那么试试Ural吧.
推荐程度:
8
推荐做法:
试着做做每一道题吧,可以按照AC Rate来.

楼主如果要中文题,又要有难度的话建议去USACO,http://ace.delos.com/usacogate?a=ywd3y6w9Cbo&C=2 网上可以找到译题
http://www.oiers.cn/usaco%20training/

参考资料:http://baike.baidu.com/view/1185778.html?fromTaglist

参考技术A acm.pku.edu.cn北大OJ,百炼当然不行啦,没有英文题怎么练

北大poj- 1006

生理周期

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 133189   Accepted: 42577

Description

人 生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面 表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想 知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个 从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现 三个高峰同天的时间是12,则输出2(注意这里不是3)。

Input

输入四个整数:p, e, i和d。 p, e, i分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d 是给定的时间,可能小于p, e, 或 i。 所有给定时间是非负的并且小于365, 所求的时间小于21252。

当p = e = i = d = -1时,输入数据结束。

Output

从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。

采用以下格式:
Case 1: the next triple peak occurs in 1234 days.

注意:即使结果是1天,也使用复数形式“days”。

Sample Input

0 0 0 0
0 0 0 100
5 20 34 325
4 5 6 7
283 102 23 320
203 301 203 40
-1 -1 -1 -1

Sample Output

Case 1: the next triple peak occurs in 21252 days.
Case 2: the next triple peak occurs in 21152 days.
Case 3: the next triple peak occurs in 19575 days.
Case 4: the next triple peak occurs in 16994 days.
Case 5: the next triple peak occurs in 8910 days.
Case 6: the next triple peak occurs in 10789 days.

Source

Translator

北京大学程序设计实习2007, Xie Di
 
分析:
看到这个题目,三个时间互质,好像没有什么快捷方法,就先尝试暴力破解了。
暴力破解写了3次:
设下一次巅峰时刻分别为p+23*j,i+33*m,e+28*k。
1. j++,m++,k++,直到找到三个数字相等的时刻就是全盛时期。测试数据都过了,但是。。。超时了。
2. 题目要求了,时间不能超过21252天,所以,从d+1开始到21252遍历,找到(ans-p)%23==0 && (ans-e)%28==0 && (ans-i)%33==0时候,就是答案了。耗时250ms。
3. 对2做了点小优化,不再是从d+1到21252一个一个遍历,而是改为,从i+33开始以33为步长进行遍历。耗时110ms。
 
这个题目也可以用“中国剩余定理”,传说中的韩信点兵啊,具体见http://blog.csdn.net/bo_jwolf/article/details/9355937
 
第一次:
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define SUCCESS 1
 5 #define FAILURE 0
 6 
 7 int p = 0;
 8 int e = 0;
 9 int i = 0;
10 int d = 0;
11 
12 int Search(int j, int M, int *inm, int i)
13 {
14     int m = *inm;
15     int result = FAILURE;
16     while(1)
17     {
18         if(p+23*j == i+M*m)
19         {
20             result = SUCCESS;
21             break;
22         }
23         else if(p+23*j > i+M*m)
24             m++;
25         else if(p+23*j < i+M*m)
26         {
27             m = 0;
28             result = FAILURE;
29             break;
30         }
31     }
32     *inm = m;
33     return result;
34 }
35 
36 int Match(int *j, int *k, int *m)
37 {
38     while(*j<65534)
39     {
40         if(SUCCESS == Search(*j,33,m,i))
41         {
42             if(SUCCESS == Search(*j,28,k,e))
43                 return SUCCESS;
44         }
45 
46         (*j)++;
47     }
48     return FAILURE;
49 }
50 
51 int main(void)
52 {
53     int j = 1;
54     int k = 1;
55     int m = 1;
56     int ans = 0;
57     int n = 0;
58     while(4==scanf("%d %d %d %d", &p, &e, &i, &d) && (p!=-1 || e!=-1 || i!=-1 || d!=-1))
59     {
60         getchar();
61         n++;
62         p = p % 23;
63         e = e % 28;
64         i = i % 33;
65 
66         Match(&j,&k,&m);
67 
68         ans = p+23*j;
69 
70         if(ans < d)
71             ans = 21252 + ans - d;
72         else
73             ans = ans -d;
74 
75         if(ans%21252 > d)
76             ans %= 21252;
77 
78         printf("Case %d: the next triple peak occurs in %d days.\\n", n, ans);
79     }
80     return 0;
81 }
View Code

第二次:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int p = 0;
 5 int e = 0;
 6 int i = 0;
 7 int d = 0;
 8 
 9 int main(void)
10 {
11     int ans = 0;
12     int n = 0;
13     while(4==scanf("%d %d %d %d", &p, &e, &i, &d) && (p!=-1 || e!=-1 || i!=-1 || d!=-1))
14     {
15         getchar();
16         n++;
17         p = p % 23;
18         e = e % 28;
19         i = i % 33;
20 
21         for(ans=d+1;;ans++)
22         {
23             if((ans-p)%23==0 && (ans-e)%28==0 && (ans-i)%33==0)
24             {
25                 break;
26             }
27         }
28 
29         if(ans < d)
30             ans = 21252 + ans - d;
31         else
32             ans = ans - d;
33 
34         if(ans%21252 > d)
35             ans %= 21252;
36 
37         printf("Case %d: the next triple peak occurs in %d days.\\n", n, ans);
38     }
39     return 0;
40 }
View Code

第三次:

 1 #include <stdio.h>
 2 
 3 int p = 0;
 4 int e = 0;
 5 int i = 0;
 6 int d = 0;
 7 
 8 int main(void)
 9 {
10     int ans = 0;
11     int n = 0;
12     int flag = 0;
13     while(4==scanf("%d %d %d %d", &p, &e, &i, &d) && (p!=-1 || e!=-1 || i!=-1 || d!=-1))
14     {
15         getchar();
16         p = p % 23;
17         e = e % 28;
18         i = i % 33;
19         ans = i+33;
20         flag = 1;
21 
22         if(p==e && e==i && p>d)
23         {
24             ans=p-d;
25             flag=0;
26         }
27         if(p==e && e==i && p<=d)
28         {
29             ans=p+21252-d;
30             flag=0;
31         }
32 
33         if(flag)
34         {
35             while(((ans-p)%23)!=0||((ans-e)%28)!=0||ans-d<0)
36                 ans+=33;
37             ans -= d;
38         }
39 
40         printf("Case %d: the next triple peak occurs in %d days.\\n", ++n, ans);
41     }
42     return 0;
43 }
View Code

 

以上是关于求像北大百练POJ那样的提供程序设计题目的网站的网址,最好是中文的的主要内容,如果未能解决你的问题,请参考以下文章

18.06.30 POJ 百练1745:Divisibility

ACM/ICPC 之 递归(POJ2663-完全覆盖+POJ1057(百练2775)-旧式文件结构图)

北大poj-1011

入坑!动态规划!POJ 1458

给个可以在线提交做acm题库的网站?

北大ACM JudgeOnline程序是谁开发的,在哪可以下载?