博客

  • Noip 2010 题解

    第一题——机器翻译

  • 禁用WordPress修订版本功能

      真的觉得很恼人,本来就是一台配置不高的服务器,还尽装着些对我来说没有用处的历史文章,我的文章错别字很多,有时候会修改,这么弄下去可不是个办法,马上找了下解决方法:   打开WordPress的目录下的wp-config.php,在中间 define(‘WP_POST_REVISIONS‘, false);   上述代码是屏蔽掉“Revision”,有几个参数可选,根据实际需要修改(蓝色部分):

    • true(默认)或者 -1:保存所有修订版本
    • false 或者 0:不保存任何版本(除了自动保存的版本)
    • 大于 0的整数 n:保存 n 个修订版本(+1 只保存自动保存版本),旧的版本将被删除。

      然后以后就不会再这个功能了,但是以前已经保存了的还是没有删掉,怎么办呢?哈哈,好办,安装这个WordPress插件(wpcleaner_10),安装完后会在设置里面多出一个WP Cleaner,然后进去就都知道了(国语),插件的官网如下:http://www.jiangmiao.org/blog/138.html

  • WordPress的首行自动缩进

      网上找了很多的网站,但是顺心的都没有,不过大致是说要修改风格的css。

      但是他们修改的是<p>标签下的所有样式都增加首行缩进,我担心有些别的地方也会变成这样,所以只好自己琢磨下风格文件,顺便说下,风格文件在WordPress目录下的wp-content/themes,然后找到你使用的风格文件夹,如我的:desk-mess,一般的风格下面应该有个style.css文件,如果没有你就根据英文名字找个类似的.css文件,在文件中搜索content,我这里搜到一个:

    #content {
    clear: both;
    width: 940px; / reduced from 950px – corrects IE6 horizontal scroll /
    margin: 0 0 0 45px;
    }

      在其中增加一行:text-indent:2em;

      如下所示:

    #content {
    clear: both;
    width: 940px; / reduced from 950px – corrects IE6 horizontal scroll /
    margin: 0 0 0 45px;

    / 自动缩进代码 /
    text-indent:2em;
    }

      然后在你的文章页面刷新吧~!

      绝对好就发个评论把(网站点击率特低,欢迎你们!)
      不过说实话,这么也不是一个好方法,和我担心得一样,不止是文章有自动缩进,包括栏目一些什么的也有自动缩进..我还是自己再发标文章的事后在HTMl模式里就把空格加上把。

  • Noip 2010之旅(上)

      学校第37届运动会闭幕式刚结束, 李智老师就准备带着我去长沙了. 他先带我去和别的老师一起吃了一餐饭, 然后就出发了!

      好久没来火车站了, 发现这里比以前要好很多了, 以前我爸带我到这里, 跟我说以前是怎么逃票的, 后来好像本来是要带我逃票的吧, 好像是我良心过不去, 所以就没了, 不太记得了, 反正现在进去就要先查票, 然后把行李放到那个检查的地方, 然后用测电子仪器的东西"搜身", 检查身份证. 搜身的时候她还问了我一句, 你是学生啊? 去干吗? 你看有多么的严谨了!

      岳阳走的时候老师碰到了一个熟人, 也是去长沙的..到了长沙在动车旁边照了相. 一出火车站老师把他带的药给他爸爸(老师顺便带了点药给她母亲, 他父亲过来拿.)一的士冲到雅礼, 梦寐以求好久了, 不过我还是在四中待着吧,  一个头发几乎没有的女的给我们签到, 我好害怕, 生怕以后和她一样, 这么恐怖..

      后来一辆702到了长沙理工学院, 坐了1个多小时的车~~~ (后来发现到了这里是长沙县).

      理工学院好大啊~ 像个小城是一样的, 在门口有校内的公交车, 一个半敞棚, 透明的车, 司机坐在上面等乘客, 从入口处到我考试的场所, 走了十几二十分钟的路, 而且这才是门口的地图上的一小根横线. 在校外, 我看到学校的栏杆从侧面看好整齐, 好杀气, 有一种威武的感觉, 想在它前面照一张, 老师没照, 就算了~~(可惜中..)

      到了我考试的机房, 好大啊~ 一个教室一个教室都是机房, 透明的窗户, 里面的电脑看的清清楚楚, 一排排液晶电脑, 真想冲上去玩下啊….

      看完机房后, 就找位置住, 找了好久好久~~ 第一家没有双人房, 说要我们去隔壁, 结果他喊另外一个人带我们去那家去看, 不过没电了,她说这一篇都没有, 就到这里住啦, 老师没理她.

      找了好久, 都没有电, 大部分也都没有双人间, 最后运气好, 发现那里还有一个商务宾馆, 虽然没有双人间, 但住在一个好大的单人间! 有台电脑, 简单的复习了一下, 看了下电视就睡了..

  • 段考总结

      高中第一次考试, 可以了解自己在班上的水平, 找准自己的位置, 也好给下次进步找一个明确的目标, 所以还是比较在乎这个成绩的.

      但是第一门出来的数学让我心痛, 班上有不少上90的, 而我只有80几分. 感觉好失落, 确实有8分是太马虎丢的分, 但是确实是没考好, 后来物理也出来了, 第一名是94. 初中的时候我的物理时常满分呢! 这次第一名都只有94分, 那我不是更低了..

      就这样一门一门都出来了, 我真觉得好死心啊, 没有一门第一.但转折很快就来了, 我发生物试卷的时候发现班上平均都是在40~50之间徘徊, 而我的确是88分! 老师上课的时候说我是全年级唯一一个80分以上的!! 接着我就发现, 我没有一门是低于80分的成绩(除了语文.)

      到现在, 总分全班第一, 理三科全班第一, 惊奇的发现文三科也是全班第一!! 我的漏洞还有很多, 还有很多单科还可以考得更好, 争取下次拿到3门单科的第一, 总分和理三科都第一, 然后语文成绩弄上来一点, 三小科太低了~~

      总的感觉就是这样的,, ^_^, 段考, 算不错..

  • Noip 2005 篝火晚会

      纠结了不知道好久,最后发现题目的意思理解错了(b1, b2, ….., bm)这些b是任意选择的, 也就是说可以选择(1, 5, 7)之类的。那么把题目理解正确了就好说了,输出的就是没有站好的人数(就是位置站错了的),所以就很简单了。
      首先一个初始列队,一个目标列队(即每个人理想的左右的人。)如果无法实现那么输出-1,不然的话就开始判断在正确位置上的人的个数,然后再用n-这个个数(要最大)。
      代码如下:

    #include <stdio.h>
    #include
    <stdlib.h>
    int left[50000],
    right[50000], p[50000];
    int hash[50000], bits[50000];
    int n;

    void output(int k)
    {
            printf("%d\n",
    k);
            getch();
            exit(0);
    }

    void init(void)
    {
            int i, j;
            scanf("%d",
    &n);
            for(i = 0; i < n; i++){
                    scanf("%d%d", &left[i],
    &right[i]);
                    left[i]–,
    right[i]–;
            }

            j = 0;
            for(i =
    0; i < n; i++){
                    p[i] =
    j;
                    if(bits[left[j]]){
                            j =
    right[j];
                    }else{
                            j =
    left[j];
                    }
                    if(bits[j]){
                            output(-1);
                    }
                    bits[j] = 1;
            }
    }

    #define
    loop(j)
    do{\
            for(i = 0; i < n; i++){\
                    if(p[j] >= i){\
                            hash[p[j] – i]++;\
                    }else{\
                            hash[p[j] – i + n]++;\
                    }\
            }\
            for(i = 0; i < n; i++){\
                    if(hash[i] > max){\
                            max = hash[i];\
                    }\
            }\
    }while(0)

    int main(void)
    {
            int i, max = 0;
            init();
            loop(i);
            memset(hash,
    0, sizeof(hash));
            loop(n – i – 1);
            output(n – max);
    }

  • tvyj 1006 isbn

      对我面向对象的能力越来越喜欢了,对于抽离函数的能力,自认为已经算是比较强大的了!当然,还远远不够咯,但是这一切都是慢慢来的,发现我挺喜欢面向对象的,但是我又不喜欢C++,哈哈,题外话不说了。
      这一题其实比较简单,估计也没几个不能AC的,但是我就提交了两次,因为当不输出Right的时候我没把isbn输出,而只输出了最后的尾数。
    #include <stdio.h>
    int ans = 0;
    /
    Mistack 2:
      当不输出Right时要输出的是完整的isbn号, 而不是单单尾数. 
    /
    char str[14];
    int now;

    /
    Mistack 1:
      下面的函数应该是读取n个数, 但是从主函数是独立出来的时候忘记修改循环次数为n而不是3了 
    /
    void deal(int n)
    {
            static int count = 1;
            int i, c;
            for(i = 1; i <= n; i++, now++){
                    c = str[now] – ‘0’;
                    ans += c * (count++);
            }
            now++;
    }

    int main(void)
    {
            int c;
            scanf("%s", &str);
            deal(1), deal(3), deal(5);
            ans %= 11;
            c = str[now];
            if(c == ‘X’){
                    c = 10;
            }else{
                    c -= ‘0’;
            }
            if(c != ans){
                    str[now] = ‘\0’;
                    printf("%s", str);
                    if(ans == 10){
                            printf("X\n");
                    }else{
                            printf("%d\n", ans);
                    }
            }else{
                    printf("Right\n");
            }
            return 0;
    }

  • tyvj 1005 采药

      01背包的例子,不过第一次写的时候不小心把01背包写成了无限背包,代码如下:

    #include <stdio.h>
    #define max(a, b) ((a)>(b)?(a):(b))
    int f[1001];

    int main(void)
    {
            int i, j;
            int t, m;
            int a, b;
            scanf("%d%d", &t, &m);
            for(i = 0; i < m; i++){
                    scanf("%d%d", &a, &b);
                    /
                    Mistack 1:
                      把01背包写成了无限背包 
                    
    /
    /              for(j = a; j <= t; j++){
                            f[j] = max(f[j], f[j – a] + b);
                    }
    /
                    for(j = t; j >= a; j–){
                            f[j] = max(f[j], f[j – a] + b);
                    }
            }
            printf("%d\n", f[t]);
            return 0;
    }

  • tyvj 1004 滑雪

      上午写了一次(http://zqynux.blog.163.com/blog/static/1674995972010101325737526/),只有70分,剩下的我也知道为什么错了,所以我的思路是不行的,但是我就想不到另外的方法了,到群里问了下,别人把代码发给我看了,, 汗, 好简单, 纯DP, 没有任何杂念, 我原本以为要排序, 但NOIP的题目似乎涉及不到这么高深的算法, 矩阵+排序+搜索, 就觉得我是想复杂了, 他这个代码太简单了…
      但是几乎是纯递归,我以为会爆掉(栈溢出), 结果用最最最大的可能用尽栈的数据测试, 结果没溢出, 后来测试发现,, 栈一般还是够用.. 
      但是我犯了一个很严重的错误, 记忆DP竟然没有给它记忆,, 所以导致最后一个数据超时了,,代码如下:

    #include <stdio.h>
    int map[100][100];
    int dis[100][100];
    int r, c;

    int check(int a,
    int b)
    {
            if(a < 0 || a >= r
    || b < 0 || b >= c){
                    return 0;
            }
            return 1;
    }

    int max(int a,
    int b)
    {
            return a > b ? a : b;
    }

    #define deal(i, j) do{\
            if(check(i, j) && map[i][j] >
    map[a][b]){\

                    t = max(srch(i, j),
    t);\

            }\
    }while(0)

    int srch(int a, int b)
    {
            int t = 0;
            if(dis[a][b] != 0){
                    return dis[a][b];
            }
            deal(a +
    1, b);
            deal(a – 1, b);
            deal(a, b + 1);
            deal(a, b – 1);
            /
            Mistack 1:
              真是….不好怎么评价自己了,, 记忆DP, 我竟然忘记记忆了..
            
    /
            dis[a][b]
    = t + 1;
            return dis[a][b];
    }

    int main(void)
    {
            int ans = 1;
            int i, j,
    t;
            scanf("%d%d", &r,
    &c);
            for(i = 0; i < r; i++){
                    for(j = 0; j < c;
    j++){
                            scanf("%d",
    &map[i][j]);
                    }
            }
            for(i = 0; i < r;
    i++){
                    for(j = 0; j < c; j++){
                            t = srch(i,
    j);
                            if(ans <
    t){
                                    ans =
    t;
                            }
                    }
            }
            printf("%d\n", ans);
            return 0;
    }

  • [未AC]tyvj 1004 滑雪

      以前看过这题,没看懂,现在是看懂了,就是在这里面找一个最长的递减(递增)序列,我的思路是,从最小的值开始向四周搜索,把每一个比它大的都算是一条路径,结果,很遗憾提交了4次也只70分,现在发现是思路不行,比如最小的0周围都是最大的数字,那么我的程序直接输出2,但是正确答案却不是1,代码先贴上:
      AC的解答看这里:http://zqynux.blog.163.com/blog/static/16749959720101013105738935/