99 条题解
-
0lys_oson LV 8 @ 2009-11-03 09:14:13
感谢xuxun....
我wa了n次== -
02009-11-02 18:58:36@
实践证明 在PASCAL里要这样
function mod10(x:longint):longint;
begin
exit(((x mod 10)+10)mod 10);
end; -
02009-11-02 10:42:58@
用一个for 处理环形。。
精简版。program number;
var fmin,fmax,sum:array[0..50,0..50]of longint;
b,a:array[0..50]of longint;
i,j,n,m:longint;
max,min:int64;
procedure doit;
var i,j,k:longint;
begin
filldword(fmin,sizeof(fmin)div 4,55555555);
fillchar(fmax,sizeof(fmax),0);
for i:=1 to n do
begin
fmin:=sum[1,i];fmax:=sum[1,i];
end;
for k:=1 to m-1 do
for i:=k+1 to n do
for j:=1 to i-1 do
begin
if fmaxfmin[j,k-1]*sum[j+1,i]then
fmin:=fmin[j,k-1]*sum[j+1,i];
end;
if fmax[n,m-1]>max then max:=fmax[n,m-1];
if fmin[n,m-1] -
02009-10-30 23:46:45@
DP+每个数循环做头
开始sum加上10000没过
后来加上10000*50就过了
要仔细!!! -
02009-10-28 13:22:59@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms将N个数拉成2N个数的链,秒杀
-
02009-10-27 10:01:27@
必须int64!
害我没一遍AC!
-
02009-10-23 08:43:38@
AC50
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms环形DP
分成P部分
第i到j间分成P部分的最大、最小值
Ai..Ak分成P-1部分,Ak+1..N分成1部分的最大、最小值就酱子
program ex;
var i,j,n,m,max,min:longint;
g,fmax,fmax1,fmin,fmin1:array[0..50,0..50]of longint;procedure init;
var i,j:longint;
begin
readln(n,m);
for i:=1 to n do
begin
readln(g);
g:=(g mod 10 +10) mod 10;
fmax1:=g;
fmin1:=g;
end;
for i:=1 to n do
for j:=i+1 to n do
begin
g:=(g+g[j,j]) mod 10;
fmax1:=g;
fmin1:=g;
end;
end;procedure dp;
var i,j,k,p:longint;
begin
for p:=2 to m-1 do
begin
filldword(fmin,sizeof(fmin)div 4,maxint);
fillchar(fmax,sizeof(fmax),0);
for i:=1 to n do
for j:=i to n do
for k:=i to j-1 do
begin
if fmax1*g[k+1,j]>fmax then
fmax:=fmax1*g[k+1,j];
if (fmin1>=0)and(fmin1*g[k+1,j]max then
max:=fmax1*((g[j+1,n]+g[1,i-1])mod 10);
if fmin1*((g[j+1,n]+g[1,i-1])mod 10) -
02009-11-09 18:08:41@
题解 Solution
-
02009-10-13 21:37:30@
有没有更快的方法???不要n^2*m
-
02009-10-10 23:57:28@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms小水题
-
02009-10-06 21:55:29@
-1 mod 10=9 不是-1
-1 mod 10=9 不是-1
-1 mod 10=9 不是-1
-1 mod 10=9 不是-1
在这里卡了半小时
如果是负数把他+100000就可以了 -
02009-10-05 11:28:36@
题目为什么说 -1 mod 10 =9 呢?
fp输出的是 -1 啊
-
02009-09-27 22:42:22@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar a,b:array[0..100]of longint;
f1,f2:array[0..10,0..52]of longint;
num:array[0..51,0..51]of longint;
n,m,i,t,max1,min1,j,k:longint;
function max(x,y:longint):longint;
begin
if x>y then max:=x else max:=y;
end;
function min(x,y:longint):longint;
begin
if x>y then min:=y else min:=x;
end;
begin
readln(n,m);
for i:=1 to n do readln(a[i]);
a[0]:=a[n];
max1:=-maxlongint;
min1:=maxlongint;
for t:=1 to n do
begin
fillchar(num,sizeof(num),0);
fillchar(b,sizeof(b),0);
fillchar(f1,sizeof(f1),0);
fillchar(f2,sizeof(f2),0);
for i:=t to t+n-1 do b:=a[i mod n];
for i:=1 to n do
for j:=i to n do num:=(num+((b[j]+10000000) mod 10)) mod 10;
for i:=1 to n do
begin
f1[1,i]:=num[1,i];
f2[1,i]:=num[1,i];
end;
for i:=2 to m do
for j:=i to n do
begin
f2:=maxlongint;
for k:=i-1 to j-1 do
begin
f1:=max(f1,f1*num[k+1,j]);
f2:=min(f2,f2*num[k+1,j]);
end;
end;
if f1[m,n]>max1 then max1:=f1[m,n];
if f2[m,n] -
02009-09-27 22:38:21@
第5组只有1个数。。
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-09-13 14:57:34@
第四个点很猥琐......差一点超时..619ms
orz 0ms的大牛 -
02009-09-12 21:51:39@
program vijos1218;
var n,m,be,en,maxs,mins,ppp:int64;k,i,ii,jj,j,p:longint;
a,s:array[0..100]of int64;
f,g:array[1..100,0..9]of int64;
function max(a,b:int64):int64;
begin
max:=a;
if b>max then exit(b);
end;
function min(a,b:int64):int64;
begin
min:=a;
if b=k then
for j:=1 to i-1 do
begin
f:=max(f[j,k-1]*((((s[i]-s[j])mod 10)+10)mod 10),f);
g:=min(g[j,k-1]*((((s[i]-s[j])mod 10)+10)mod 10),g);
end;
end;
if f[n,m]>maxs then maxs:=f[n,m];
if g[n,m] -
02009-09-07 12:33:18@
var
a,s:array[0..1000]of longint;
f0,f1:array[0..100,0..100]of longint;
i,j,max,min,p,i1,k,n,m:longint;
procedure init;
var
temp,i:integer;
begin
temp:=a[1];
for i:=1 to n-1 do a[i]:=a;
a[n]:=temp;
end;
procedure intt;
var
i,j:integer;
begin
s[0]:=0;
for i:=1 to n do s[i]:=s+a[i];
for i:=1 to n do
for j:=0 to m do
begin
f0:=10000000;
f1:=0;
end;
for i:=1 to n do
begin
f0:=((s[i] mod 10)+10)mod 10;
f1:=((s[i] mod 10)+10)mod 10;
end;
end;
begin
readln(n,m);
for i:=1 to n do read(a[i]);
intt;
if m=1 then begin writeln(f0[n,1]);writeln(f1[n,1]);halt;end;
min:=maxlongint;max:=-100000000;
for i:=1 to n do
begin
for i1:=2 to n do
for k:=1 to m do
if i1>=k then
for p:=1 to i1-1 do
begin
if ((s[i1]-s[p])mod 10+10)mod 10*f0[p,k-1]f1[i1,k] then
f1[i1,k]:=((s[i1]-s[p])mod 10+10)mod 10*f1[p,k-1];
end;
if f0[n,m]max then max:=f1[n,m];
init;
intt;
end;
writeln(min);
writeln(max);
end.
动态方程f=前i个数分成k分最佳值.
f:=max{min}f[j,k-1]*opj[j,i]; -
02009-09-02 21:49:25@
program mm;
var
f,g,f1,g1,we:array[0..100,0..100] of longint;
i,j,k,l,m,n,max,min,p:longint;
a:array[0..1000] of longint;
begin
assign(input,'game.in'); reset(input);
assign(output,'game.out'); rewrite(output);
//F=F*F
readln(n,m);
for i:=1 to n do begin
read(a[i]);
a:=a[i];
end;
for j:=1 to n do
for i:=1 to 2*n-j+1 do
f1:=f1+a;
for j:=1 to n do
for i:=1 to 2*n-j+1 do begin
f1:=((f1 mod 10)+10) mod 10;
g1:=f1;
end;
we:=f1;
for k:=2 to m do begin
for j:=k to n do
for i:=1 to 2*n-j+1 do begin
f:=0;
g:=maxlongint;
for p:=k-1 to j-1 do begin
if fg1*we then
g:=g1*we;
end;
end;
f1:=f;
g1:=g;
end;
max:=0;
min:=maxlongint;
for i:=1 to n do begin
if f>max then max:=f;
if g -
02009-08-20 14:52:28@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 25ms
├ 测试数据 04:答案正确... 306ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:331msvar
ax,an:array[1..1000,1..1000] of int64;
sum,s:array[1..1000] of int64;
i,j,max,min,n,m,p,k,e,t:longint;procedure count(p:longint);
var
i,j,e:longint;
begin
e:=0;
for i:=p to n+p-1 do begin e:=e+s[i]; sum[i]:=e; end;
for i:=n+p to n*2{+p} do sum[i]:=sum;
end;procedure secure;
var
i,j,sum:longint;
begin
sum:=0;
for i:=1 to n do inc(sum,s[i]);
writeln(10-abs(sum mod 10));
writeln(10-abs(sum mod 10));
halt;
end;begin
readln(n,m);
for i:=1 to n do readln(s[i]);
p:=0; max:=0; min:=maxlongint; fillchar(an,sizeof(an),$7F);
for i:=n+1 to 2*n do s[i]:=s;if m=1 then secure;
for p:=1 to n do
begin
count(p);
for j:=p to n+p-1 do
begin
ax[p,j]:=(10+(sum[j] mod 10)) mod 10;
an[p,j]:=(10+(sum[j] mod 10)) mod 10;
end;
for i:=p+1 to m+p-1 do
for j:=p to n+p-1 do
for k:=i-1 to j-1 do
begin
t:=(10+((sum[j]-sum[k]) mod 10)) mod 10 *ax;
if axt then an:=t;
end;
if ax>max then max:=ax;
if an -
02009-08-19 23:03:58@
OMG...这是普及组的...我out了...