JZOJ2017.08.12 Cグループ
T1
タイトルの説明
入力
しゅつりょく
考え方:
コード:
T2
タイトルの説明
入力
しゅつりょく
考え方:
コード:
タイトルの説明
入力
しゅつりょく
考え方:
コード:
T4
タイトルの説明
入力
しゅつりょく
考え方:
コード:
T5
タイトルの説明
入力
しゅつりょく
問題:
コード:
タイトルの説明
Windows , , 。 :
1. n, n*n , n , n ( 0, 1), 。 0 ,1 ( , )。
i j, i j i j ( Windows ),i j 。 i j, ( Windows )。
2. i j , :
(1) i j 、 ( i j
0), -1( )。 i1 j1( :i1<>i (1<>j) , , -2。 , 。 , , :
(2) i j ( i j -1 -2), , i j 。
(3) i j , ( i j 1), , “GAME OVER!”, 。
3. i j , , , :
(1) i j 0( ), ( n n , , ), 。
(2) , , , “YOU ARE WINNER!”, 。
入力
mine.in。 n(n<=50), n*n 。 , , i j, 0 0 。
しゅつりょく
mine.out。 , “YOU ARE WINNER!”, “GAME OVER!”,
。
考え方:
, 。
コード:
var a:array[0..100,0..100] of longint;
i,j,n,t:longint;
procedure print;
var i,j:longint;
begin
for i:=1 to n do begin for j:=1 to n do write(a[i,j],' '); writeln; end;
end;
procedure sign(x,y:longint);
begin
if a[x,y]=0 then a[x,y]:=-1 else
if a[x,y]>-1 then begin a[x,y]:=-2; dec(t); end;
end;
begin
assign(input,'mine.in');
assign(output,'mine.out');
reset(input);
rewrite(output);
read(n);
for i:=1 to n do for j:=1 to n do begin read(a[i,j]); if a[i,j]=1 then inc(t); end;
i:=1; j:=1;
while (i<>0)and(j<>0) do
begin
read(i,j);
if (i=0)and(j=0) then begin print; close(input); close(output);halt; end;
case a[i,j] of
0:
begin
a[i,j]:=-1;
sign(i+1,j+1); sign(i+1,j); sign(i,j+1);
sign(i+1,j-1); sign(i-1,j+1);
sign(i-1,j-1); sign(i,j-1); sign(i-1,j);
if t=0 then
begin
write('YOU ARE WINNER!');
close(input); close(output);
halt;
end;
end;
1:
begin
write('GAME OVER!');
close(input); close(output);
halt;
end;
end;
end;
close(input); close(output);
end.
T2
タイトルの説明
, ? n n-1 。
2012 ( ) , 。
, , i 。 , , 1。
, , 。
入力
tree.in, N 。 N, 。 2 N , a b, a b 。
しゅつりょく
tree.out N , i i 。
考え方:
, ,AC!!!
コード:
uses math;
var n,i,x,y,ans:longint;
a:array[0..1010,0..1010] of longint;
procedure dfs(f,s,dep:longint);
var i:longint;
begin
if (a[s,0]<1) then begin ans:=max(dep,ans); exit; end else
if (dep>1)and(a[s,0]<=1) then begin ans:=max(dep,ans); exit; end;
for i:=1 to a[s,0] do
if (a[s,i]<>f) then dfs(s,a[s,i],dep+1);
end;
begin
assign(input,'tree.in');
assign(output,'tree.out');
reset(input);
rewrite(output);
read(n);
for i:=1 to n-1 do
begin
read(x,y);
inc(a[x,0]); a[x,a[x,0]]:=y;
inc(a[y,0]); a[y,a[y,0]]:=x;
end;
for i:=1 to n do begin ans:=0; dfs(0,i,1); writeln(ans); end;
close(input);
close(output);
end.
タイトルの説明
A×B×C , 1×1×1 。 A, B, C。( , )。
(A-1)×(B-2)×(C-2) 。 n, n=(A-1)×(B-2)×(C-2)。 , , 1×1×1 。 , n , min{A×B×C-n} max{A×B×C-n}。
入力
block.in。
1 , n。
しゅつりょく
block.out。
1 , 。
考え方:
max=8*n-9( )
min。 , 。 min(max)
コード:
var i,j,x:longint;
max,min,n:int64;
a:array[0..100000]of longint;
begin
assign(input,'block.in');
assign(output,'block.out');
reset(input);
rewrite(output);
min:=maxlongint; read(n); max:=8*n+9;
for i:=1 to trunc(sqrt(n)) do
if n mod i=0 then
begin
inc(x);
a[x]:=i;
if n div i<>i then
begin
inc(x);
a[x]:=n div i;
end;
end;
for i:=1 to x do
for j:=1 to x do
if(a[i]*a[j]*(n div a[i] div a[j])=n)
and((n div a[i] div a[j]+2)*(a[i]+2)*(a[j]+1)-nthen
min:=(n div a[i] div a[j]+2)*(a[i]+2)*(a[j]+1)-n;
write(min,' ',max);
close(input);
close(output);
end.
T4
タイトルの説明
4 7 。 。 47,477 , 5,17,417 。
next(x) x 。
:
next(L)+next(L+1)+...+next(R-1)+next(R)。
L R , 。
入力
sum.in L R(1≤L≤R≤109 ),L R 。
しゅつりょく
sum.out , 。
考え方:
4 7, 。
。
コード:
uses math;
var l,r,l1,r1,t:longint;
ans:array[0..51] of int64;
a:array[0..5001] of int64;
procedure jia(x:int64);
var i:longint;
begin
i:=1;
ans[i]:=ans[i]+x;
while ans[i]>9 do
begin
ans[i+1]:=ans[i] div 10+ans[i+1];
ans[i]:=ans[i] mod 10;
inc(i);
end;
t:=max(i,t);
end;
procedure init;
var i,j,t:longint;
begin
read(l,r);
j:=0;
for i:=2 to 2047 do
begin
inc(j);
t:=i;
while t>1 do
begin
case t mod 2 of
0:a[j]:=a[j]*10+4;
1:a[j]:=a[j]*10+7;
end;
t:=t div 2;
end;
if (l<=a[j])and(l1=0) then l1:=j;
if (r<=a[j])and(r1=0) then r1:=j;
end;
end;
procedure main;
var i:longint;
begin
t:=1;
jia((min(r,a[l1])-l+1)*a[l1]);
for i:=l1+1 to r1-1 do jia((a[i]-a[i-1])*a[i]);
if l1<>r1 then jia((r-max(l,a[r1-1]))*a[r1]);
for i:=t downto 1 do write(ans[i]);
end;
begin
assign(input,'sum.in');
assign(output,'sum.out');
reset(input);
rewrite(output);
init;
main;
close(input);
close(output);
end.
T5
タイトルの説明
:
1. : ( ) 。
, 2、 4 2、 4、 5 2*3 。
2. : ( ) 。
3. : 。
: n m , r c , , 。
入力
submatrix.in。
n, m, r, c, ᧿ , 。
n , m , ᧿ n m 。
しゅつりょく
submatrix.out。
1 , 1 , ᧿ 。
問題:
!
dp
f[i][j]= i j
コード:
var a:array[0..20,0..20]of longint;
b,y:array[0..20]of longint;
f:array[0..20,0..20,0..20]of longint;
i,j,k,l,n,m,r,c,ans:longint;
procedure init;
var i,j:longint;
begin
read(n,m,r,c);
for i:=1 to n do for j:=1 to m do read(a[i,j]);
ans:=maxlongint;
end;
procedure dfs(t1,t2:longint);
var tot,i,j,k,t,l,x:longint;
begin
if (t2>n) and (t1then exit;
if t1then
begin
dfs(t1,t2+1);
inc(b[0]);
b[b[0]]:=t2;
dfs(t1+1,t2+1);
b[b[0]]:=0;
dec(b[0]);
end else
if t1=r then
begin
fillchar(f,sizeof(f),$7f);
f[0,0,0]:=0;
for i:=0 to m-1 do
begin
for j:=i+1 to m do
begin
if j>=c then t:=c else t:=j;
if i=0 then t:=1;
for k:=1 to t do
begin
f[i,j,k]:=0;
x:=maxlongint;
for l:=0 to i-1 do if f[l,i,k-1]then x:=f[l,i,k-1];
f[i,j,k]:=x;
if i-1<0 then f[i,j,k]:=0;
if (f[i,j,k]>ans) or (f[i,j,k]>512000) then continue;
if k=1 then
begin
for l:=2 to r do
f[i,j,k]:=f[i,j,k]+abs(a[b[l-1],j]-a[b[l],j]);
end else
begin
for l:=1 to r do
f[i,j,k]:=f[i,j,k]+abs(a[b[l],i]-a[b[l],j]);
for l:=2 to r do
f[i,j,k]:=f[i,j,k]+abs(a[b[l-1],j]-a[b[l],j]);
end;
if (k=c) and (f[i,j,k]then ans:=f[i,j,k];
end;
end;
end;
end;
end;
begin
assign(input,'submatrix.in');
assign(output,'submatrix.out');
reset(input);
rewrite(output);
init;
dfs(0,1);
write(ans);
close(input); close(output);
end.