36 条题解
-
0lksjg LV 8 @ 2015-10-20 20:17:22
编译成功
测试数据 #0: Accepted, time = 0 ms, mem = 248 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 244 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 244 KiB, score = 10
测试数据 #3: Accepted, time = 0 ms, mem = 244 KiB, score = 10
测试数据 #4: Accepted, time = 0 ms, mem = 248 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 244 KiB, score = 10
测试数据 #6: Accepted, time = 0 ms, mem = 248 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 248 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 248 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 244 KiB, score = 10
Accepted, time = 0 ms, mem = 248 KiB, score = 100
代码
#include<cstdio>
using namespace std;
void ok(int x,int y,int l);
int s=1;
int main()
{
int n,i,j;
scanf("%d %d %d",&n,&i,&j);
int x=i,y=j,l=n;
for(;;)
{
if(x==1||y==1||x==l||y==l)
{
ok(x,y,l);
break;
}
s=s+(l-1)*4;
l=l-2;
x--;
y--;
}
printf("%d",s);
}
void ok(int x,int y,int l)
{
int i=1,j=1,z=0;
for(;;s++)
{
if((j==1&&z==0)||(j==l&&z==1)||(i==l&&z==2)||(j==1&&z==3)) z++;
if(i==x&&j==y) break;
switch(z)
{
case 1:j++;break;
case 2:i++;break;
case 3:j--;break;
case 4:i--;break;
}
}
} -
02015-09-02 00:57:03@
其实不用循环。。顺序下来就好。。
这个矩阵从行或者列来分析都比较棘手,但分成圈来看,每一圈都遵循顺时针递增的规律。所以,我们先确定所求的点(i,j)在第k圈,并且计算第k圈的边长ak以及第一个数字bk,这样问题就简单了,分(i,j)落在第k圈的上、下、左、右四条边上的情况来讨论。
k,ak,bk的计算方法见代码。
###Pascal Code
program Project1;
var
ak,bk,n,k,x,y:longint;
function min(a,b,c,d:longint):longint;
begin
min:=a;
if(b<min)then min:=b;
if(c<min)then min:=c;
if(d<min)then min:=d;
end;
begin
readln(n,x,y);
k:=min(x,y,n-x+1,n-y+1); {计算坐标(x,y)在第几圈}
bk:=4*(n+(k-2)*(n-k)-1)+1; {第k圈的第一个数}
ak:=n-2*(k-1); {第k圈的边长}
if(x=k)then writeln(bk+y-k) {在该圈上边}
else if(y=k+ak-1)then writeln(bk+ak-1+x-k) {在该圈右边}
else if(x=k+ak-1)then writeln(bk+3*ak+k-3-y) {在该圈下边}
else writeln(bk+4*ak+k-4-x); {在该圈左边}
readln
end. -
02015-08-26 17:57:37@
#去年比赛的时候我傻乎乎的直接枚举4个边,现在想想真是太简单了,但是要求较高的分析能力
int x,y,n; cin>>n>>x>>y;
int p=min(x,n-x+1);
int q=min(y,n-y+1);
int quan=q>=p?p:q; //以上是判断在第几个圈
int nx=quan,ny=quan,num=1;
for (int i=1;i<quan;++i) {
num+=4*n-4; n-=2;
} //计算出这个圈的左上角的数
//从这个圈的左上角出发顺时针走,碰到坐标一样则输出并结束程序
//技术含量不高
for (int i=0;i<n;++i) {
if (nx==x&&ny+i==y) {
cout<<num+i;
return 0;
}
}
num=num+n-1; ny=ny+n-1;
for (int i=0;i<n;++i) {
if (nx+i==x&&ny==y) {
cout<<num+i;
return 0;
}
}
num=num+n-1; nx=nx+n-1;
for (int i=0;i<n;++i) {
if (nx==x&&ny-i==y) {
cout<<num+i;
return 0;
}
}
num=num+n-1; ny=ny-n+1;
for (int i=0;i<n;++i) {
if (nx-i==x&&ny==y) {
cout<<num+i;
return 0;
}
} -
02015-08-04 15:47:06@
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int n,i,j,q;
int main()
{
cin>>n>>i>>j;if( i>n/2 && j>n/2 )
q=min(n-i+1,n-j+1 );
if( i>n/2 && j<=n/2)
q=min(n-i+1,j);
if( i<=n/2 && j<=n/2 )
q=min(i,j);
if( i<=n/2 && j>n/2 )
q=min(i,n-j+1);
if( i>j )
printf("%d",-4*q*q+4*n*q+2*q+1-i-j );
else
printf("%d",-4*q*q+4*q*n-4*n+6*q+i+j-3 );
return 0;
} -
02015-08-01 11:18:21@
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<time.h>
#include<stdlib.h>
using namespace std;
int a[1005];
void mul(int k){
int i;
int enter = 0;
for (i = 0; i < 1000; i++){
a[i] *= k;
a[i] += enter;
enter = a[i] / 10;
a[i] %= 10;
}
}
int main(){
int n;
cin >> n;
int t = n % 3;
int k = n / 3;
k--;
a[0] = 1;
while (k--){
mul(3);
}
if (t == 0)mul(3);
if (t == 1)mul(4);
if (t == 2)mul(6);
int i;
for (i = 1000; !a[i]; i--);
while (i >= 0)cout << a[i--];
return 0;
} -
02015-08-01 10:06:47@
#include<cstdio>
#include<cstring>
using namespace std;
const int dx[4]={1,0,-1,0};
const int dy[4]={0,-1,0,1};
bool v[30001][30001];
int main()
{
int n,i,j,k,x,y,t,x1,y1;
scanf("%d%d%d",&n,&x1,&y1);
memset(v,false,sizeof(v));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
v[i][j]=true;
x=1;y=1;k=1;t=3;
while(k<=n*n)
{
if(x==x1&&y==y1)
{
printf("%d",k);
return 0;
}
k++;
v[x][y]=false;
if(v[x+dx[t]][y+dy[t]]!=true)
{
t++; if( t==4) t=0;
x=x+dx[t];
y=y+dy[t];
}
else
{
x=x+dx[t];
y=y+dy[t];
}
}
return 0;
} -
02015-06-28 11:29:15@
编译成功
Free Pascal Compiler version 2.6.4 [2014/03/06] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling foo.pas
foo.pas(2,8) Note: Local variable "q" not used
foo.pas(2,10) Note: Local variable "t" not used
foo.pas(2,12) Note: Local variable "s" not used
Linking foo.exe
22 lines compiled, 0.0 sec , 28192 bytes code, 1628 bytes data
3 note(s) issued测试数据 #0: Accepted, time = 0 ms, mem = 432 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 432 KiB, score = 10
测试数据 #2: Accepted, time = 15 ms, mem = 432 KiB, score = 10
测试数据 #3: Accepted, time = 0 ms, mem = 432 KiB, score = 10
测试数据 #4: Accepted, time = 0 ms, mem = 432 KiB, score = 10
测试数据 #5: Accepted, time = 15 ms, mem = 432 KiB, score = 10
测试数据 #6: Accepted, time = 0 ms, mem = 432 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 432 KiB, score = 10
测试数据 #8: Accepted, time = 15 ms, mem = 432 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 432 KiB, score = 10
Accepted, time = 45 ms, mem = 432 KiB, score = 100
代码var
n,i,j,q,t,s,d,e:integer;
ans:longint;
begin
readln(n,i,j); d:=n div 2; ans:=0;
for e:=1 to d do
if (i=1)or(i=n)or(j=1)or(j=n) then
begin
if i=1 then ans:=j+ans;
if i=n then ans:=2*(n-1)+n-j+1+ans;
if j=1 then if i=1 then ans:=1+ans
else ans:=3*(n-1)+n-i+1+ans;
if j=n then ans:=n-1+i+ans;
break;
end
else
begin
ans:=ans+4*(n-1);
n:=n-2;
i:=i-1;j:=j-1;
end;
writeln(ans);
end. -
02015-06-27 10:40:49@
-
02015-04-23 18:46:35@
不明白只发程序不发题解的楼下各位是什么心态- -我不觉得会有人蛋疼的看完这些程序。。。
-
02015-02-06 19:27:28@
测试数据 #0: Accepted, time = 0 ms, mem = 744 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 740 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 744 KiB, score = 10
测试数据 #3: Accepted, time = 0 ms, mem = 740 KiB, score = 10
测试数据 #4: Accepted, time = 0 ms, mem = 740 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 740 KiB, score = 10
测试数据 #6: Accepted, time = 7 ms, mem = 744 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 744 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 744 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 744 KiB, score = 10
Accepted, time = 7 ms, mem = 744 KiB, score = 100
代码
var
z,i,j,l,n,m,x,zong,y,xs,xx,yz,yy,x1,y1:longint;
r:real;
function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end;
begin
readln(n,x,y);
xs:=x-1;
xx:=n-x;
yz:=y-1;
yy:=n-y;
m:=min(min(xs,xx),min(yz,yy)); {writeln(m);}
l:=0; z:=n;
for i:=1 to m do
begin
l:=(n-1)*4+l;
dec(n); dec(n);
end; {writeln(n,' ',l);}zong:=1; x1:=1;y1:=1;
x:=x-m;
y:=y-m; { writeln(x,' ',y); }
if (x<>1)or (y<>1)then while (n-1)*4>zong do
begin
if zong<n then inc(y1);
if (zong>=n) and(zong<2*n-1)then inc(x1);
if (zong>=2*n-1)and(zong<3*n-2)then dec(y1);
if (zong>=3*n-2)and (zong<4*n-4)then dec(x1);
inc(zong);
if (x1=x) and(y1=y)then break;
end else zong:=1;
writeln(zong+l);
readln;end.//7ms 哪来的?!!!!!!!!
-
02015-02-02 17:30:27@
###Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
void sq();
void cl();
int x,y,m=0,n,n1,n2;
void sq()
{
if(x==n1||x==n2||y==n1||y==n2) cl();
else {
m=m+(n2-n1)*4;
n1++;
n2--;
sq();
}
}
void cl()
{
if(x==n1) printf("%d",m+1+y-n1);
else if(x==n2) printf("%d",m+(n2-n1)*3+1-y+n1);
else if(y==n1) printf("%d",m+(n2-n1)*3+1+n2-x);
else if(y==n2) printf("%d",m+n2-n1+1+x-n1);
}
int main()
{
int i,j;
scanf("%d%d%d",&n,&x,&y);
n1=1;
n2=n;
sq();
return 0;
} -
02015-02-01 10:27:51@
var
n,sum,x,y,x1,y1,i:longint;
begin
readln(n,x,y);
sum:=1;x1:=1;y1:=1;
for i:=1 to (n+1) div 2 do
begin
inc(sum,n+1-i*2);y1:=y1+n+1-i*2;
if (x1=x) and (y1>=y) then begin writeln(sum-(y1-y));halt;end;
inc(sum,n+1-i*2);x1:=x1+n+1-i*2;
if (y1=y) and (x<=x1) then begin writeln(sum-(x1-x));halt;end;
inc(sum,n+1-i*2);y1:=y1-(n+1-i*2);
if (x1=x) and (y1<=y) then begin writeln(sum-(y-y1));halt;end;
inc(sum,n-i*2);x1:=x1-(n-i*2);
if (y1=y) and (x1<=x) then begin writeln(sum-(x-x1));halt;end;
inc(sum);y1:=y1+1;
end;
end. -
02014-12-15 22:05:21@
#include<iostream>
#include<cmath>
using namespace std;
int n,i,j,q;
int main()
{
cin>>n>>i>>j;
if(i>n/2&&j>n/2)q=min(n-i+1,n-j+1);
if(i>n/2&&j<=n/2)q=min(n-i+1,j);
if(i<=n/2&&j<=n/2)q=min(i,j);
if(i<=n/2&&j>n/2)q=min(i,n-j+1);
if(i>j)cout<<-4*q*q+4*n*q+2*q+1-i-j;
else cout<<-4*q*q+4*q*n-4*n+6*q+i+j-3;
return 0;
} -
02014-12-14 18:41:08@
var
n,sum,x,y,x1,y1,i:longint;
begin
readln(n,x,y);
sum:=1;x1:=1;y1:=1;
for i:=1 to (n+1) div 2 do
begin
inc(sum,n+1-i*2);y1:=y1+n+1-i*2;
if (x1=x) and (y1>=y) then begin writeln(sum-(y1-y));halt;end;
inc(sum,n+1-i*2);x1:=x1+n+1-i*2;
if (y1=y) and (x<=x1) then begin writeln(sum-(x1-x));halt;end;
inc(sum,n+1-i*2);y1:=y1-(n+1-i*2);
if (x1=x) and (y1<=y) then begin writeln(sum-(y-y1));halt;end;
inc(sum,n-i*2);x1:=x1-(n-i*2);
if (y1=y) and (x1<=x) then begin writeln(sum-(x-x1));halt;end;
inc(sum);y1:=y1+1;
end;
end. -
02014-11-26 21:31:27@
#include<iostream>
using namespace std;
main()
{
int a,b,c,d,e=0,f=0,g=0,i,n,o=0,s=0,u=0,x[30001]={0},y[30001]={0};
cin>>n>>a>>b;
x[1]=1;
if(n%2==1)
{
u=n;
o=2;
for(i=2;i<=n/2+1;i++)
{
x[i]=x[i-1]+(u-1)*4;
u-=2;
}
for(i=n/2+2;i<=n;i++)
{
x[i]=x[i-1]-(o-1)*4;
o+=2;
}
for(i=1;i<=n/2+1;i++)
y[i]=x[n-i+1]+(n/2+1-i)*2;
for(i=n/2+2;i<=n;i++)
y[i]=x[n-i+1]+(i-(n/2+1))*2;
c=a;
d=b;
if(a>n/2+1)
c=n-a+1;
if(b>n/2+1)
d=n-b+1;
e=min(c,d);
f=e;
g=n-e+1;
if(a==f)
s=x[f]+b-f;
if(a==g)
s=x[g]+g-b;
if(b==f)
s=y[f]+g-a;
if(b==g)
s=y[g]+a-f;
if(a==f&&b==f)
s=x[f];
}
else
{
u=n;
o=2;
for(i=2;i<=n/2;i++)
{
x[i]=x[i-1]+(u-1)*4;
u-=2;
}
x[n/2+1]=x[n/2]+2;
for(i=n/2+2;i<=n;i++)
{
x[i]=x[i-1]-o*4;
o+=2;
}
for(i=1;i<=n/2;i++)
y[i]=x[n-i+1]+(n/2-i)*2+1;
for(i=n/2+1;i<=n;i++)
y[i]=x[n-i+1]+(i-(n/2))*2-1;
c=a;
d=b;
if(a>n/2)
c=n-a+1;
if(b>n/2)
d=n-b+1;
e=min(c,d);
f=e;
g=n-e+1;
if(a==f)
s=x[f]+b-f;
if(a==g)
s=x[g]+g-b;
if(b==f)
s=y[f]+g-a;
if(b==g)
s=y[g]+a-f;
if(a==f&&b==f)
s=x[f];
}
cout<<s;
} -
02014-11-24 15:16:00@
Var
n,x,y,k,ans,m,i:longint;
function min(a,b,c,d:longint):longint;
begin
if a<b then min:=a
else min:=b;
if c<min then
min:=c;
if d<min then
min:=d;
end;
begin
readln(n,x,y);
if n=1 then
begin
writeln(1);
exit;
end;
k:=min(x,y,n-x+1,n-y+1);
ans:=0;
m:=n;
for i:=1 to k-1 do
begin
inc(ans,(m-1)*4);
dec(m,2);
end;
if k=x then inc(ans,y-k+1)
else if k=n-y+1 then inc(ans,m+x-k)
else if k=n-x+1 then inc(ans,(m-1)*2+n-y+2-k)
else if k=y then inc(ans,(m-1)*3+n-x+2-k);
writeln(ans);
end.
信息
- ID
- 1913
- 难度
- 5
- 分类
- (无)
- 标签
- 递交数
- 2027
- 已通过
- 624
- 通过率
- 31%
- 被复制
- 16
- 上传者