题解

130 条题解

  • 0
    @ 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 有效耗时:9ms

    program 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.

  • 0
    @ 2009-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!!!!!!!!!!!!!!!!!!

  • 0
    @ 2009-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;

  • 0
    @ 2009-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就不发了~ ~

  • 0
    @ 2009-09-23 21:04:25

    也没有考虑啥回文串

    暴力模拟 0ms orz

    var 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.

  • 0
    @ 2009-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]

  • 0
    @ 2009-08-22 09:34:05

    为什么超时!!!!!!!!!!!

  • 0
    @ 2009-08-11 22:04:47

    /*

    因为k值

  • 0
    @ 2009-08-10 14:52:22

    细心点就可以了数据好弱

  • 0
    @ 2009-07-26 16:46:33

    Orz

  • 0
    @ 2009-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

  • 0
    @ 2009-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行

  • 0
    @ 2009-01-11 09:57:33

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    注意回文串!!!!!

    [/size=3]

    [/font=幼圆]

    小弟以血的教训告诉大家

    如果是循环枚举的同志,千万注意回文串,因为这时无论以哪个串作为颠倒的串都是一样的,我在找到解后没有退出,以至于选手输出比标准输出长,5次才AC

  • 0
    @ 2008-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]

  • 0
    @ 2008-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

  • 0
    @ 2008-11-05 21:44:37

    编译通过...

  • 0
    @ 2008-10-27 16:05:00

    原来用ansistring就能过- -

  • 0
    @ 2008-10-06 12:39:38

    cgy4ever 的方法简明,快速!

  • 0
    @ 2008-09-29 09:26:01

    我的做法是先枚举被翻折的字串x,在将此字串翻回来后每一位字符与其余两个字串y、z相应字符ord后的数字差值,看每一位x[i]-y[i]的值(小于0就加26)与z[i]-x[i]的值(小于0就加26)是否全等于一个数k,

    个人觉得做法没错,但有三个点存取非法,为什么?

  • 0
    @ 2008-09-28 21:37:26

    k=0!!!!!!!!!

信息

ID
1449
难度
6
分类
字符串 | 模拟 点击显示
标签
递交数
6903
已通过
1850
通过率
27%
被复制
9
上传者