切换到宽版
|主页
帮助
银行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
主页
论坛
帖子
日志
用户
版块
群组
帖子
搜索
热搜:
NOIP
Pascal
教程
OI爱好者(OIFans.cn)
>
USACO
>
Checker Challenge 跳棋的挑战
发帖
回复
返回列表
新帖
7489
阅读
5
回复
Checker Challenge 跳棋的挑战
[复制链接]
上一主题
下一主题
离线
danielzcc
UID:522
注册时间
2006-02-05
最后登录
2007-10-16
在线时间
0小时
发帖
4
搜Ta的帖子
精华
0
OI财富
40
威望
5
贡献值
0
交易币
0
访问TA的空间
加好友
用道具
OIFans入门选手
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
0
发表于: 2006-02-06
文字
USACO (Section 1.4 )中的 Checker Challenge 跳棋的挑战 怎么做时间才能最短。
大家帮帮忙呀。
只要能通过就行。
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
archimedes
UID:107
注册时间
2005-11-10
最后登录
2012-10-26
在线时间
73小时
发帖
474
搜Ta的帖子
精华
6
OI财富
10090
威望
1957
贡献值
6
交易币
0
访问TA的空间
加好友
用道具
管理员
加关注
发消息
只看该作者
1
发表于: 2006-02-07
剪枝,剪枝,剪枝,再剪枝
程序到网上去抄标程
共
条评分
回复
举报
离线
danielzcc
UID:522
注册时间
2006-02-05
最后登录
2007-10-16
在线时间
0小时
发帖
4
搜Ta的帖子
精华
0
OI财富
40
威望
5
贡献值
0
交易币
0
访问TA的空间
加好友
用道具
OIFans入门选手
加关注
发消息
只看该作者
2
发表于: 2006-02-08
哪里有好的标程,请告知一二,谢谢
共
条评分
回复
举报
离线
stevenjl
UID:1
注册时间
2005-10-29
最后登录
2025-04-11
在线时间
138小时
发帖
439
搜Ta的帖子
精华
5
OI财富
10970
威望
814
贡献值
2
交易币
18860
访问TA的空间
加好友
用道具
管理员
加关注
发消息
只看该作者
3
发表于: 2006-02-08
楼主可是温州中学的?你参加今年的NOIP复赛了吗?……绍兴的那个……
共
条评分
Dream Walker...
回复
举报
离线
stevenjl
UID:1
注册时间
2005-10-29
最后登录
2025-04-11
在线时间
138小时
发帖
439
搜Ta的帖子
精华
5
OI财富
10970
威望
814
贡献值
2
交易币
18860
访问TA的空间
加好友
用道具
管理员
加关注
发消息
只看该作者
4
发表于: 2006-02-08
复制代码
Program Checker;
Var diagPLUS: Array[2..30] Of Boolean;
diagMINUS: Array[-15..15] Of Boolean;
sol: Array[1..15] Of ShortInt;
i,n,found: Longint;
stop: Boolean;
next,prev: Array[0..16] Of ShortInt;
sy: ShortInt;
Procedure Search0(y:ShortInt);
Var x,i:ShortInt;
Begin
If stop Then Exit;
If y=n+1 Then Begin
Inc(found);
If found<4 Then Begin
For i:=1 To n-1 Do
Write(sol[i],' ');
Writeln(sol[n]);
End Else
stop:=True;
Exit;
End;
If sol[y]<>0 Then Begin
Search0(y+1);
Exit;
End;
x:=next[0];
While x<=n Do Begin
If Not ((diagPLUS[x+y]) Or (diagMINUS[x-y])) Then Begin
sol[y]:=x;
diagPLUS[x+y]:=True;
diagMINUS[x-y]:=True;
next[prev[x]]:=next[x];
prev[next[x]]:=prev[x];
Search0(y+1);
diagPLUS[x+y]:=False;
diagMINUS[x-y]:=False;
next[prev[x]]:=x; prev[next[x]]:=x;
End;
x:=next[x];
End;
sol[y]:=0;
End;
Procedure Search;
Var x:ShortInt;
Begin
If sy=n+1 Then Begin
Inc(found);
Exit;
End;
If sol[sy]<>0 Then Begin
Inc(sy);
Search;
Dec(sy);
Exit;
End;
x:=next[0];
While x<=n Do Begin
If Not ((diagPLUS[x+sy]) Or (diagMINUS[x-sy])) Then Begin
sol[sy]:=x;
diagPLUS[x+sy]:=True;
diagMINUS[x-sy]:=True;
next[prev[x]]:=next[x];
prev[next[x]]:=prev[x];
Inc(sy);
Search;
Dec(sy);
diagPLUS[x+sy]:=False;
diagMINUS[x-sy]:=False;
next[prev[x]]:=x;
prev[next[x]]:=x;
End;
x:=next[x];
End;
sol[sy]:=0;
End;
Procedure Search2(miny:Longint);
Var x,y,i:ShortInt;
curf:Longint;
Begin
x:=n Div 2+1;
For y:=miny To n Div 2 Do
If Not (diagPLUS[x+y] Or diagMINUS[x-y]) Then Begin
curf:=found;
sol[y]:=x;
diagPLUS[x+y]:=True;
diagMINUS[x-y]:=True;
next[prev[x]]:=next[x]; prev[next[x]]:=prev[x];
sy:=1;
Search;
If y>miny Then
found:=found+(found-curf);
sol[y]:=0;
diagPLUS[x+y]:=False;
diagMINUS[x-y]:=False;
next[prev[x]]:=x; prev[next[x]]:=x;
End;
End;
Procedure Search1;
Var x,y,i:ShortInt;
Begin
y:=n Div 2+1;
For x:=1 To n Div 2 Do Begin
sol[y]:=x;
diagPLUS[x+y]:=True;
diagMINUS[x-y]:=True;
next[prev[x]]:=next[x]; prev[next[x]]:=prev[x];
Search2(x);
diagPLUS[x+y]:=False;
diagMINUS[x-y]:=False;
next[prev[x]]:=x; prev[next[x]]:=x;
End;
sol[y]:=0;
found:=found*4;
x:=n Div 2+1;
sol[y]:=x;
diagPLUS[x+y]:=True;
diagMINUS[x-y]:=True;
next[prev[x]]:=next[x]; prev[next[x]]:=prev[x];
sy:=1;
Search;
End;
Begin
Assign(Input,'checker.in'); Reset(Input);
Assign(Output,'checker.out'); Rewrite(Output);
Read(n);
found:=0;
FillChar(diagPLUS,SizeOf(diagPLUS),False);
FillChar(diagMINUS,SizeOf(diagMINUS),False);
FillChar(sol,SizeOf(sol),0);
For i:=0 To n+1 Do Begin
prev[i]:=i-1;
next[i]:=i+1;
End;
If n Mod 2=0 Then Begin
stop:=False;
Search0(1);
sy:=1;
found:=0;
Search;
End Else Begin
stop:=False;
Search0(1);
found:=0;
Search1;
End;
Writeln(found);
Close(Output);
End.
共
条评分
Dream Walker...
回复
举报
离线
lipeiqian
UID:188
注册时间
2005-11-19
最后登录
2006-11-19
在线时间
0小时
发帖
4
搜Ta的帖子
精华
0
OI财富
80
威望
9
贡献值
0
交易币
0
访问TA的空间
加好友
用道具
OIFans入门选手
加关注
发消息
只看该作者
5
发表于: 2006-06-11
复制代码
/*
TASK: checker
LANG: C++
*/
#include <fstream>
using namespace std;
ifstream fin("checker.in");
ofstream fout("checker.out");
int n,pr=0,p=0,h[15];
char c[15],db[40],dc[28];
void work(int k)
{
int i;
if(k>n)
{
p+=2;
if(n%2==1&&h[1]==(n+1)/2||n<=6) p--;
if(++pr<=3)
{
for(i=1;i<n;i++) fout<<h[i]<<' ';
fout<<h[n]<<endl;
}
return;
}
for(i=1;i<=(k==1&&n>6?(n+1)/2:n);i++)
{
if(db[i+k]==0&&dc[k-i+15]==0&&c[i]==0)
{
h[k]=i;
db[i+k]=1;
dc[k-i+15]=1;
c[i]=1;
work(k+1);
db[i+k]=0;
dc[k-i+15]=0;
c[i]=0;
}
}
}
int main()
{
fin>>n;
work(1);
fout<<p<<endl;
return 0;
}
共
条评分
回复
举报
发帖
回复
返回列表
https://bbs.oifans.cn
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限100 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
发 布
隐藏
快速跳转
最新动态
NOIP2011
OI难题悬赏区
MM群2007七夕模拟赛官方发布/答疑区
OIFans.cn第一次NOIP初赛模拟赛
秋之回忆模拟赛
OI漫谈
竞赛题库
资料教程
新手社区
华山论剑
趣味OI
C/C++专区
征战OI
RQNOJ
USACO
TOJ, PKU, ZJU
Vijos
URAL, SGU
OI水库
随心所欲
信息相关
OI管理局
OIFans大喇叭
投诉/斑竹申请区
OI公告
关闭
关闭
选中
1
篇
全选