30 条题解
-
0coolxxx LV 9 @ 2016-04-01 09:59:31
http://www.cnblogs.com/Coolxxx/p/5335523.html
测试数据 #0: Accepted, time = 0 ms, mem = 556 KiB, score = 10
测试数据 #1: Accepted, time = 0 ms, mem = 552 KiB, score = 10
测试数据 #2: Accepted, time = 0 ms, mem = 552 KiB, score = 10
测试数据 #3: Accepted, time = 0 ms, mem = 556 KiB, score = 10
测试数据 #4: Accepted, time = 0 ms, mem = 552 KiB, score = 10
测试数据 #5: Accepted, time = 0 ms, mem = 560 KiB, score = 10
测试数据 #6: Accepted, time = 15 ms, mem = 556 KiB, score = 10
测试数据 #7: Accepted, time = 0 ms, mem = 556 KiB, score = 10
测试数据 #8: Accepted, time = 0 ms, mem = 556 KiB, score = 10
测试数据 #9: Accepted, time = 0 ms, mem = 552 KiB, score = 10
Accepted, time = 15 ms, mem = 560 KiB, score = 100 -
02009-10-04 16:16:50@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms题目质量不太高。。。
-
02009-10-04 14:02:39@
program cly;
const
inf='p1582.in'; ouf='p1582.out';
NO='Nobody can win!';
var
name:array[1..100]of string;
n,a,b,i:longint;
begin
readln(n);
readln(a,b);
for i:=1 to n do
readln(name[i]);
if a*b mod 80 then writeln(NO) else
begin
write(name[(a*b div 4 -1) mod n +1]);
writeln(' can win!');
end;
end. -
02009-08-15 21:23:52@
var
i,j,k:longint;
o,n,m:longint;
player:array[0..50] of string;
procedure noanswer;
begin
writeln('Nobody can win!');
halt;
end;
begin
readln(o);
readln(n,m);
for i:=1 to o-1 do
readln(player[i]);
readln(player[0]);
if (n=0) or (m=0) then writeln(player[1],' can win!');
if (n*m mod 40) then noanswer;
if (n*m mod 80) then noanswer;
if (n=1) or (m=1) then noanswer;
k:=n*m;
k:=k div 4;
writeln(player[k mod o],' can win!');
end. -
02009-08-14 10:43:48@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
只要N*M MOD 8 = 0 then 有解 -
02009-08-11 10:58:12@
很多疑惑:
1.个人认为此题描述不清,想法同楼下~应该是每个人都按照有解的方向填充,而不是最优决策2.为什么n*m mod 8是有解的,怎么证明?
-
02009-08-10 15:43:54@
这题我不懂。。。
什么是最优决策?
如果一个人事先用该题的标程算出自己会输,
他要是捣乱一下,
乱摆L形使地图无法填满,
使该赢的人摆不成L,
那么他不就能平局了吗?
比如地图:
0000
0000俩人玩,第一个人要是这样摆
1110
1000
那他准输。要是他这样摆:
0100
0111
俩人就平局了。这样对于他是更优的吧? -
02009-08-10 13:53:27@
var
o,n,m,i,j,k,sum,ss:longint;
name:array[1..50,1..1000]of char;
a:array[1..50]of longint;
s:string;
begin
readln(o);
readln(n,m);
for i:=1 to o do
begin
readln(s);
a[i]:=length(s);
for j:=1 to a[i] do
name:=s[j];
end;
if (n*m mod 80)or(n mod 20)or(m mod 20) then begin write('Nobody can win!'); halt; end
else
begin
sum:=(n*m div 4);
if sum -
02009-08-09 13:32:54@
第200个AC...
纪念一下 -
02009-08-09 11:25:31@
比赛的时候只有60分。。。。。
-
02009-08-09 10:00:57@
对于n*m mod 8 的我的理解:
首先,我们知道,可以拼出:
0001
0111 这样的2*4的块。
然后,我们想,若一条边长为奇数呢?
然后,凭借俄罗斯方块的经验,我们可以拼出:
000
011
221
231
234
334
544
555 这样的一个3*8 的块。
所以我们可以知道,当一条边为8的倍数的时候,另一条边只要大于1,则有解。
综上, mod 8 是绝对科学的。
俄罗斯方块是智者的游戏! -
02009-08-09 01:02:33@
严重抗议!!!!!!!!!!!!!!
var
name:array [1..50] of string[50];
n,m,o,i,ans:integer;
function pd:boolean;
begin
if (n>=8) and (n mod 8=0) and (m>1) then exit(true);
if (m>=8) and (m mod 8=0) and (n>1) then exit(true);
if (n mod 2=0) and (m mod 4=0) and (n>=2) and (m>=4) then exit(true);
if (m mod 2=0) and (n mod 4=0) and (m>=2) and (n>=4) then exit(true);
exit(false);
end;
begin
readln(o);
readln(n,m);
for i:=1 to o do readln(name[i]);
if pd
then begin
ans:=n*m div 4;
ans:=ans mod o;
if ans=0 then ans:=o;
writeln(name[ans],' can win!');
end
else writeln('Nobody can win!');
end.
才70分!!
---|---|---|---|---|---|---|---|---|---|---|---|--
var
name:array [1..50] of string[50];
n,m,o,i,ans:integer;
function pd:boolean;
begin
if (n>=8) and (n mod 8=0) and (m>1) then exit(true);
if (m>=8) and (m mod 8=0) and (n>1) then exit(true);
if (n mod 2=0) and (m mod 4=0) and (n>=2) and (m>=4) then exit(true);
if (m mod 2=0) and (n mod 4=0) and (m>=2) and (n>=4) then exit(true);
exit(false);
end;
begin
readln(o);
readln(n,m);
for i:=1 to o do readln(name[i]);
if pd
then begin
ans:=(n*m div 4-1) mod o+1;
writeln(name[ans],' can win!');
end
else writeln('Nobody can win!');
end.
AC了
---|---|---|---|---|---|---|---|---|---|---|---|---|
唯一的差别就是:
70分:
ans:=n*m div 4;
ans:=ans mod o;
if ans=0 then ans:=o;
AC的:
ans:=(n*m div 4-1) mod o+1;
这也能叫差别吗???????题目也没说限制代码的行数吖!!!!
怎么就少了30分!!!!!!!!!!!!!!!!!!! -
02009-08-09 00:16:52@
其实我觉得第一个人在很多情况下完全可以让自己不输(就是使矩阵无法被填满),所谓最优,其实不然
-
02009-08-08 22:48:07@
交了不下十次才A!!!
开始写的巨长,看了别个大牛的思路后边改边交,最后就剩下这么多
var
o,m,n,i,k:longint;
st:array[1..50] of string;
begin
readln(o);
readln(n,m);
for i:= 1 to o do readln(st[i]);
if (n*m= 0) or (n*m mod 8 0) then begin
writeln('Nobody can win!');
halt;
end;
k:= (n*m div 4-1) mod o+1;
writeln(st[k],' can win!');
end. -
02009-08-08 22:23:25@
-
02009-08-08 22:21:21@
搞了N次才知道,原来是-4,不是DIV 4,贴程序供大家鄙视:
program p1582;
var
s:array[1..50] of string;
total,m,n,a,i,tmp:longint;
begin
readln(a);
readln(m,n);
for i:=1 to a do
readln(s[i]);
if m*n mod 80 then writeln('Nobody can win!')
else
begin
tmp:=m*n;
total:=0;
while tmp-4>=0 do
begin
tmp:=tmp-4;
inc(total);
if total>a then total:=total-a;
end;
writeln(s[total],' can win!');
end;
end. -
02009-08-08 22:00:15@
这题有漏洞啊!!
1*8的情况没考虑! -
02009-08-08 21:39:01@
L能拼出来的最基础的块:::
0 1 1 1
0 0 0 1
其他的都是由这个块拼的(无其他情况)
就这样YY出来了
(考试的时候YY的是
1 1 1 4
2 2 1 4
2 3 4 4
2 3 3 3
没看到右边那个...忘记复制到记事本里了......只过了4个)
-
02009-08-08 21:21:37@
比赛情况考虑少了,LX,你加上那个也不错,只是数据没有罢了
-
02009-08-08 21:02:23@
为什么n*m mod 8=0就可以,1*8也可以吗