zoukankan      html  css  js  c++  java
  • 2016.8.16上午纪中初中部NOIP普及组比赛

    2016.8.16上午纪中初中部NOIP普及组比赛

    链接:https://jzoj.net/junior/#contest/home/1334
    这次也翻车了,感觉比之前难多了。
    辛辛苦苦改完了,太难改了!

    进度:
    分数:020+AC+010+060=190
    改题:AC+AC+AC+AC=AK
    一、作弊
    链接:https://jzoj.net/junior/#contest/show/1334/0
    好坑!把string改为ansistring时50,又改了改,时间超限80
    改了好久……
    莫名其妙的时超。方法和讲的一样,却时超了
    题目简化:
    就是在一个长字符串中找出一个最长的回文串!
    正解:
    枚举回文串的中心,发现比原来最长的长时,
    就替代之。要注意一下长度为偶数的情况。

    var
            n,i,j,len,l,k,ans1:longint;
            s,s1,ans2:ansistring;
    //read&write:
    procedure reads;
    begin
            readln(n);
            readln(s);
            s:=s+'+';
    end;
    procedure writes;
    begin
            writeln(ans1);
            writeln(ans2);
    end;
    //runs:
    procedure runs;
    begin
            ans1:=1;
            ans2:=s[1];
            for k:=1 to n do
            begin
                    i:=k;
            j:=k;
                    while (i>1) and (j<n) and (s[i-1]=s[j+1]) do
                    begin
                            dec(i);
                            inc(j);
                    end;
                    s1:=copy(s,i,j-i+1);
                    len:=j-i+1;
                    if len>ans1 then
                    begin
                            ans1:=len;
                            ans2:=s1;
                    end;
                    i:=k;
                    j:=k+1;
                    if s[i]=s[j] then
                    begin
                            while (i>1) and (j<n) and (s[i-1]=s[j+1]) do
                            begin
                                    dec(i);
                                    inc(j);
                            end;
                    end;
                    s1:=copy(s,i,j-i+1);
                    len:=j-i+1;
                    if len>ans1 then
                    begin
                            ans1:=len;
                            ans2:=s1;
                    end;
            end;
    end;
    //files:
    procedure openfile(s:string);
    begin
            assign(input,s+'.in');reset(input);
            assign(output,s+'.out');rewrite(output);
    end;
    procedure closefile;
    begin
            close(input);
            close(output);
    end;
    //main program:
    begin
            openfile('cheat');
            reads;
            runs;
            writes;
            closefile;
    end.

    二、最大杂志
    链接:https://jzoj.net/junior/#contest/show/1334/1
    这个水,一不小心就AC了。
    我可是用了数据库的哟!
    题目简化:
    没什么好简化的!
    正解:
    一看就知道是找规律的题目。
    先手动算一些数据,
    会发现规律:
    如果输入为n,那么输出的结果就为第n+1行的杨辉三角的中间数!
    杨辉三角:
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    ……
    求出来后输入后直接输出就行了(数据库)
    记得%12345678!

    var
            f:array[1..3001,1..3001]of qword;
            i,j,n:longint;
    //files:
    procedure openfile(s:string);
    begin
            assign(output,s+'.txt');rewrite(output);
    end;
    procedure closefile;
    begin
            close(input);
            close(output);
    end;
    begin
            openfile('yanghui');
            for i:=1 to 3001 do
            begin
                    f[i,1]:=1;
                    f[i,i]:=1;
            end;
            for i:=2 to 3001 do
                    for j:=2 to i-1 do
                    begin
                            f[i,j]:=(f[i-1,j-1]+f[i-1,j])mod 12345678;
                    end;
            writeln('(');
            writeln(f[1,1]);
            for i:=2 to 3001 do
            begin
                    if i mod 10<>0 then write(',',f[i,(i+1)div 2]) else writeln(',',f[i,(i+1)div 2]);
            end;
            writeln(')');
            closefile;
    end.//创建数据库

    至于怎么用,我就不说了
    三、投影
    链接:https://jzoj.net/junior/#contest/show/1334/2
    又是一道考语文的题目!出题者故意说复杂!
    我语文差……考试时匆匆输出样例
    题目简化:
    不好说……一个建筑就是一个个贴着底的矩形,可以重叠的矩形!
    然后组成题目的图案
    最少的输出
    正解:
    学霸的方法!
    首先那个什么w和下面输入的第一个数是没用的!
    然后一层一层弄,如果遇到跟自己同样高的,就标记一下
    放在一起。

    var
            a:array[1..10000]of longint;
            bz:array[1..10000]of boolean;
            w,n,i,j,k,x,y,ans,min,l:longint;
    //reads&writes:
    procedure reads_runs;
    begin
            readln(n,w);
            for i:=1 to n do
            begin
                    readln(x,y);
                    while (l>0)and(a[l]>y) do dec(l);
                    if ((l=0)or(a[l]<y))and(y>0) then
                    begin
                            inc(l);
                            inc(ans);
                            a[l]:=y;
                    end;
            end;
    end;
    procedure writes;
    begin
            writeln(ans);
    end;
    //files:
    procedure openfile(s:string);
    begin
        assign(input,s+'.in');reset(input);
        assign(output,s+'.out');rewrite(output);
    end;
    procedure closefile;
    begin
        close(input);
        close(output);
    end;
    //main program:
    begin
            openfile('skyline');
            reads_runs;
            writes;
            closefile;
    end.

    四、除草
    链接:https://jzoj.net/junior/#contest/show/1334/3
    考试时贪心,居然能拿60分
    运气,运气!!
    题目简化:
    就是在一条线上有很多个点,然后走来走去,
    所有点都去一次的最短路程(在这里时间也一样啦)
    正解:
    上一届钟俊权哥哥的正解
    当然是DP
    设f[i,j,1]代表走过i~j的所有点,停在i处
    f[i,j,2]代表走过i~j的所有点,停在j处
    初始化
    f[i,i,1]=f[i,i,2]=abs(l-a[i])*n;
    状态转移方程:
    f[i,j,1]=min{f[i+1,j,1]+(a[i+1]-a[i])*(n-j+i),
    f[i+1,j,2]+(a[j]-a[i])*(n-j+i)}
    f[i,j,2]=min{f[i,j-1,1]+(a[j]-a[i])*(n-j+i),
    f[i,j-1,2]+(a[j]-a[j-1])*(n-j+i)}
    输出min{f[1,n,1],f[1,n,2]}

    var
            a:array[0..1000]of longint;
            f:array[0..1000,0..1000,1..2] of longint;
            n,l,i,j:longint;
    //min:
    function min(a,b:longint):longint;
    begin
            if a<b then exit(a)else exit(b);
    end;
    //reads&writes:
    procedure reads;
    begin
            readln(n,l);
            for i:=1 to n do readln(a[i]);
    end;
    procedure writes;
    begin
            writeln(min(f[1,n,1],f[1,n,2]));
    end;
    //runs:
    procedure runs;
            procedure qsort(l,r:longint);
            var
                    i,j,mid:longint;
            begin
                    i:=l;
                    j:=r;
                    randomize;
                    mid:=a[l+random(r-l)];
                    repeat
                            while a[i]<mid do inc(i);
                            while a[j]>mid do dec(j);
                            if i<=j then
                            begin
                                    a[0]:=a[i];
                                    a[i]:=a[j];
                                    a[j]:=a[0];
                                    inc(i);
                                    dec(j);
                            end;
                    until i>j;
                    if i<r then qsort(i,r);
                    if l<j then qsort(l,j);
            end;
    begin
            qsort(1,n);
            for i:=1 to n do
            begin
                    f[i,i,1]:=abs(l-a[i])*n;
                    f[i,i,2]:=f[i,i,1];
            end;
            for i:=n downto 1 do
                    for j:=i+1 to n do
                    begin
                            f[i,j,1]:=min(f[i+1,j,1]+(a[i+1]-a[i])*(n-j+i),
                                          f[i+1,j,2]+(a[j]-a[i])*(n-j+i));
                            f[i,j,2]:=min(f[i,j-1,1]+(a[j]-a[i])*(n-j+i),
                                          f[i,j-1,2]+(a[j]-a[j-1])*(n-j+i));
                    end;
    end;
    //files:
    procedure openfile(s:string);
    begin
            assign(input,s+'.in');reset(input);
            assign(output,s+'.out');rewrite(output);
    end;
    procedure closefile;
    begin
            close(input);
            close(output);
    end;
    begin
            openfile('ontherun');
            reads;
            runs;
            writes;
            closefile;
    end.
    
    

    给大家说个经验:如果只输入一个数的,很有可能是找规律。
    在一个点里面输入t组数据的,一般都是输入后直接输出的那种。
    题外话
    1、我猛地发现,自从有新同学来我们教室之后,我都翻车了。希望明天不翻。
    2、303的人享受着不被吵的优越的待遇,我也要努力进去!
    3、今天是否能坚持AK是一个难题。最后辛苦地AK了。

  • 相关阅读:
    textdecoration、textdecorationcolor、textdecorationline、textdecorationstyle属性
    深入解读Promise对象
    如何将WCF服务发布到IIS中去VS2010版
    iPhone 常用面试题目
    WCF入门简单教程(图文) VS2010版
    VS2010中如何创建一个WCF
    ObjC: 使用KVO
    iOS面试重点问题
    iOS开发面试题
    《Iphone开发基础教程》第五章 自动旋转和调整大小
  • 原文地址:https://www.cnblogs.com/jz-597/p/11145343.html
Copyright © 2011-2022 走看看