130 条题解
-
0fjlyzpcr LV 8 @ 2009-11-09 13:59:57
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 9ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:9msprogram ex;
var i,j,n,t1,t2,t3:longint;
s:array[0..2]of ansistring;
now,now1,now2:ansistring;
bo1,bo2:boolean;procedure init;
var i,j:longint;
begin
readln(n);
for i:=0 to 2 do readln(s[i]);
end;procedure print;
var i,j:longint;
begin
writeln(now);
halt;
end;procedure main;
var i,j,k:longint;
begin
for i:=0 to 2 do
begin
if i=0 then begin t1:=1;t2:=2; end;
if i=1 then begin t1:=0;t2:=2; end;
if i=2 then begin t1:=0;t2:=1; end;
now:='';
for j:=n downto 1 do now:=now+s[i][j];
now1:=now;
now2:=now;
for k:=0 to 6 do
begin
bo1:=true;bo2:=true;
for j:=1 to n do
begin
now1[j]:=chr((ord(now[j])-97+k)mod 26+97);
now2[j]:=chr(((ord(now[j])-97-k)mod 26+26)mod 26+97);
if ( copy(now1,1,j)copy(s[t1],1,j) )or
( copy(now2,1,j)copy(s[t2],1,j) ) then bo1:=false;
if ( copy(now1,1,j)copy(s[t2],1,j) )or
( copy(now2,1,j)copy(s[t1],1,j) ) then bo2:=false;
if (not bo1) and (not bo2) then break;
end;
if bo1 or bo2 then print;
end;
end;
end;begin
init;
main;
end. -
02009-11-07 08:13:41@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
农夫山泉有点甜.
注意!(k>=0)!!!!第一次居然WA了3个点,就是K=0的情况!
6>=k>=0!!!!!!!!!!!!!!!!!! -
02009-10-28 02:02:02@
无聊题。。1遍轻松秒。。
很囧的用了这个生成全排列:
procedure work(n:longint);
var i:longint;
begin
if n=4 then
begin
if check then
begin
writeln(s);
halt;
end;
end else
for i:=1 to 3 do
begin
if not v[i] then
begin
v[i]:=true;
b[n]:=i;
work(n+1);
v[i]:=false;
end;
end;
end; -
02009-10-09 18:25:22@
【题目】: 字符串还原(赛)
【类型】: 字符串处理
【难度】:1.3
【来源】:vijos1449
【关键字】:字符串
【分析】:
1.我们找到最好处理的那个——反方向加密的那个,然后枚举其他两个串对应其他两种情况(so easy,不再赘述)
复杂度o(m*n)(m是一个较小的常数)
2.我们也可以枚举k的大小来处理其中两个串,再与另外一个串处理后比较
复杂度o(m*k*n)(m同上)
显然当n比较大的时候第二种算法效率较差,还好此题的n和k都比较小,0ms很好拿到
【时间复杂度】:O(n)
【代码】:楼下的大牛们都给了,o的菜CODE就不发了~ ~ -
02009-09-23 21:04:25@
也没有考虑啥回文串
暴力模拟 0ms orzvar x,y,z:ansistring;
i,l,t:integer;procedure check(a,b,c:ansistring);
var i,r,s,t:integer;
begin
for i:=1 to l do
begin
s:=ord(a[l-i+1]);
r:=ord(b[i]);
t:=ord(c[i]);
if s>t then t:=t+26;
if r>s then begin r:=r-26; end;
if t-ss-r then exit;
end;
for i:=1 to l do write(a[l-i+1]);
halt;
end;begin
readln(l);
readln(x);
readln(y);
readln(z);
check(x,y,z);
check(x,z,y);
check(y,x,z);
check(y,z,x);
check(z,x,y);
check(z,y,x);
end. -
02009-08-22 17:08:23@
program p1;
type arr=array[1..10001]of char;
var i,j,k,l,n:integer;
st1,st2,st3,s1,s2,s3:arr;
a:array[1..10001]of integer;
procedure init;
begin
readln(n);
for i:=1 to n do read(s1[i]);readln;
for i:=1 to n do read(s2[i]);readln;
for i:=1 to n do read(s3[i]);
end;
procedure work(s1,s2,s3:arr);
var i,j,k:integer;
f:boolean;
begin
for i:=1 to n do
begin
a[i]:=ord(s1[i])-ord(s2[i]);
if a[i] -
02009-08-22 09:34:05@
为什么超时!!!!!!!!!!!
-
02009-08-11 22:04:47@
/*
因为k值 -
02009-08-10 14:52:22@
细心点就可以了数据好弱
-
02009-07-26 16:46:33@
Orz
-
02009-07-18 16:31:36@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms#include
#include
int main()
{
char a[3][12000],temp1,temp2;
char x[3][12000],y[3][12000],z[3][12000];
int n,i,j,k,m;
scanf("%d",&n);
scanf("%s%s%s",a[0],a[1],a[2]);
for(i=0;i -
02009-03-26 20:01:46@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
暴力it!!!不用怕。。。55行 -
02009-01-11 09:57:33@
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
注意回文串!!!!!
[/size=3]
[/font=幼圆]
小弟以血的教训告诉大家
如果是循环枚举的同志,千万注意回文串,因为这时无论以哪个串作为颠倒的串都是一样的,我在找到解后没有退出,以至于选手输出比标准输出长,5次才AC -
02008-11-11 22:46:28@
[blue]/***|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|*
突然才发现,Orz是动词……一直一位“Orz教主”是个名词……
***|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|\**|*/
[/blue]
猥琐……极其猥琐……
害我提交了3次才AC……
第一次是调试的时候把数组改小了忘改回来……(有一组成功,一组超时,两组错误31,剩下的错误老长一串……)
第二次没验证翻转的那种……本以为不用验证的,结果90……
第三次……终于AC……
(太诡异了……把AC的程序拿回来运行,居然什么也不提示就退出去了……)猥琐地上程序:
/*orzstr.c by Tydus*/
#include
typedef unsigned char string[10001];
string tmp[3][13],cipher;
int l,i,ii,j;
void shift(const string src,string dst,signed int k){
for(ii=0;ii'z') dst[ii]-=26;
if(dst[ii] -
02008-11-06 00:04:36@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
#include
#include
int main()
{
int n;
int i,j,k,m;
int temp;
static char a[4][20000];
static char b[4][20000];
static char c[50][20000];
static char d[50][20000];
scanf("%d",&n);
scanf("%s%s%s",a[0],a[1],a[2]);
for(i=0;i -
02008-11-05 21:44:37@
编译通过...
-
02008-10-27 16:05:00@
原来用ansistring就能过- -
-
02008-10-06 12:39:38@
cgy4ever 的方法简明,快速!
-
02008-09-29 09:26:01@
我的做法是先枚举被翻折的字串x,在将此字串翻回来后每一位字符与其余两个字串y、z相应字符ord后的数字差值,看每一位x[i]-y[i]的值(小于0就加26)与z[i]-x[i]的值(小于0就加26)是否全等于一个数k,
个人觉得做法没错,但有三个点存取非法,为什么? -
02008-09-28 21:37:26@
k=0!!!!!!!!!