294 条题解
-
0snullp LV 3 @ 2008-11-02 22:52:48
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms最基本的DP。。。没用什么int64啊~
#include
#includeusing namespace std;
int bx,by,mx,my;
int map[20][20]={0};bool check(int kx,int ky){
if ((kx==mx&&ky==my)||(kx==mx-1&&ky==my-2)||(kx==mx-1&&ky==my+2)||(kx==mx-2&&ky==my+1)||(kx==mx-2&&ky==my-1)||(kx==mx+1&&ky==my+2)||(kx==mx+1&&ky==my-2)||(kx==mx+2&&ky==my+1)||(kx==mx+2&&ky==my-1)) return false;
return true;
}int main(){
cin>>bx>>by>>mx>>my;
map[bx+1][by]=1;
for (int i=bx;i>=0;i--){
for (int j=by;j>=0;j--){
if (check(i,j)) map[i][j]+=map[j]+map[i][j+1];
}}
cout -
02008-11-02 19:35:55@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
假的搜索题,用杨辉三角形解。 -
02008-11-01 10:56:50@
居然要用int64..T,T
-
02008-11-01 10:51:04@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案错误...程序输出比正确答案长
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:90 有效耗时:0ms为什么├ 测试数据 03:答案错误...程序输出比正确答案长
.....const
q:array[1..8,1..2] of integer=((1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1));
var
bx,by,hx,hy,i,j:longint;
a:array[0..15,0..15] of int64;
begin
read(bx,by,hx,hy);
for i:=1 to bx do
for j:=1 to by do
begin
a:=1;
a[0,j]:=1;
a:=-1;
end;
a[hx,hy]:=0;
for i:=1 to 8 do
if (hx+q>-1) and (hx+q-1) and (hy+q -
02008-10-30 20:14:12@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 384ms
├ 测试数据 10:答案正确... 494ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:878ms
貌似速度有点慢。。
用简单的回朔。
庆祝AC 24 ! -
02008-10-30 18:10:41@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02008-10-27 22:39:36@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02008-10-27 21:17:22@
DFS吧……
先把马能跳到的地方全部标记一遍把
我觉得这样比较简单 -
02008-10-27 17:02:18@
程序写那么长干嘛 有点疑惑
const dh:Array[1..8,1..2] of integer=
((1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1));
var
f:Array[0..15,0..15] of int64;
una:Array[-2..17,-2..17] of boolean;
n,m,i,j,hx,hy:longint;
begin
read(n,m,hx,hy);
una[hx,hy]:=true;
for i:=1 to 8 do
una[hx+dh,hy+dh]:=true;
f[0,0]:=1;
for i:=0 to n do
for j:=0 to m do
if not una then
begin
inc(f,f);
inc(f,f);
end;
writeln(f[n,m]);
end. -
02008-10-26 22:53:20@
From zhouyc
马拦过河卒 全国青少年信息学奥林匹克分区联赛 (NOIp) 竞赛原题编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 244ms
├ 测试数据 10:答案正确... 244ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:488ms55555555555555555
复制的时候少了个括号,WA了一次,我的AC率#include
using namespace std;
int a[10000][10000],m=0,x1,y1;
int f(int x,int y)
{
if ((x==x1)&&(y==y1)) {m++;return 0;}
if (((x+1)x1>>y1>>x>>y;
for (i=0;i -
02008-10-16 16:50:28@
program soldier(input,output);
var
g:array [-30..30,-30..30] of int64;
v:array [-30..30,-30..30] of boolean;
i,j,n,m,x,y,k:longint;
begin
fillchar(g,sizeof(g),0);
fillchar(v,sizeof(v),true);
read(n,m,x,y);
v[x,y]:=false;
v[x-2,y-1]:=false; v[x-1,y-2]:=false;
v[x+2,y+1]:=false; v[x+1,y+2]:=false;
v[x-2,y+1]:=false; v[x+2,y-1]:=false;
v[x-1,y+2]:=false; v[x+1,y-2]:=false;
for i:=0 to n do if v then g:=1 else break;
for i:=0 to m do if v[0,i] then g[0,i]:=1 else break;
for k:=1 to m do
for i:=1 to n do
if v then g:=g+g;
write(g[n,m]);
end. -
02008-10-16 08:14:47@
用递推的注意啦。。。
一定要看楼下 -
02008-10-14 15:36:06@
被第三组数据阴了
大家注意一下
5 6 2 2
。。。。。。 -
02008-10-12 20:46:39@
同志们啊,我会回朔了,800年都没会过~~!!!!
递归过了,汗。。。。。。。。。。。。。
#include
using namespace std;
int x,y,x1,y1,a[10000][10000],m=0;
int huishuo (int x3,int y3)
{
if (a[x3][y3]==2)
{
m++;
return 0;
}
if ((a[x3+1][y3]!=1)&&(x3+1x>>y>>x1>>y1;
for (i=0;i -
02008-10-06 20:09:40@
program soldier(input,output);
var
g:array [-30..30,-30..30] of int64;
v:array [-30..30,-30..30] of boolean;
i,j,n,m,x,y,k:longint;
begin
fillchar(g,sizeof(g),0);
fillchar(v,sizeof(v),true);
read(n,m,x,y);
v[x,y]:=false;
v[x-2,y-1]:=false; v[x-1,y-2]:=false;
v[x+2,y+1]:=false; v[x+1,y+2]:=false;
v[x-2,y+1]:=false; v[x+2,y-1]:=false;
v[x-1,y+2]:=false; v[x+1,y-2]:=false;
for i:=0 to n do if v then g:=1 else break;
for i:=0 to m do if v[0,i] then g[0,i]:=1 else break;
for k:=1 to m do
for i:=1 to n do
if v then g:=g+g;
write(g[n,m]);
end. -
02008-10-06 19:07:35@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 306ms
├ 测试数据 10:答案正确... 353ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:659ms -
02008-10-05 20:38:33@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msf[0][0]=1;
for (i=1;i -
02008-10-02 15:56:06@
const dx:array[1..8] of longint=(1,1,2,2,-1,-1,-2,-2);
dy:array[1..8] of longint=(2,-2,1,-1,2,-2,1,-1);
var i,n,m,x,y,total:longint;
ans:array[0..15,0..15] of longint;
procedure search(x,y:longint);
begin
if (x=n) and (y=m) then inc(total)
else
if (x -
02008-10-01 15:14:47@
一开始BFS+回溯=超时
于是采用了记忆化搜索,全部0ms-___|\__|\__|\__|_-
1.马是走日字,要把马能一步走到的点和马所在的点先标记了
2.试下这个数据15 15 7 8 答案是19063305 -___|\__|-
#include
using namespace std;
int ex,ey,n,m;
const int dir[4][2]={1,0,-1,0,0,1,0,-1},dir2[8][2]={1,2,1,-2,-1,2,-1,-2,2,-1,2,1,-2,-1,-2,1};
struct _pos{int x,y;}top,tmp,q[1000000];
int mark[16][16],head,rear,dp[16][16];
int dfs(int x,int y)
{
int i,tx,ty,ret=0;
if(x==0&&y==0)return 1;
if(dp[x][y])return dp[x][y];
for(i=0;itx+ty)continue;
if(mark[tx][ty]==mark[x][y]-1)
ret+=dfs(tx,ty);
}
return dp[x][y]=ret;
}
int main()
{
bool flag;
int i,j,tex,tey;
while(cin>>n>>m>>ex>>ey)
{
for(i=0;i -
02008-09-27 22:00:33@
杨辉三角
刚开始看到有负数, 就把计数的total改成longint了, 结果还是60分,把所有变量都改了,就行了.
很难理解列,其他的变量都是i j x y... 我也只开了-1..16的数组, 说明测试数据没有问题啊,,,, 为什么会这样列..?