2015年10月

无题

今天给语文老师打了一篇因月考欠了两个星期的推荐作文,突然间想说些什么。
首先对于命题作文我能拿到推荐是十分意外的,因为我本身就对此苦手,考试作文从未上过23/30,而这次破天荒50/60。
当然对于同桌来说我还是十分naive,一直28/30不怕你不服。
命题作文主要我就是找不到材料写。一提起与某个主题相关的事件我却总是找不到。
不谦虚地说自己也能算是生活有心人。对一件事进行描写自然毫无问题。但就不知道如何对付这种逆向的查询。
然而这学期似乎都拿了不错的分数?
自己知道只是虚像。

一边打自己的作文,一边嗤之以鼻。
这种不成熟的表达方法也是我写的?这种让人看起来眼花缭乱的句子是我写的?
没办法嘛,初稿作文总是如此simple。
本身选材选得还可以。所以很多句子要是仔细斟酌的话,不仅语言能上一层楼,甚至立意也是。
加油多练。

语文老师把我的作文还给我的时候说,心理描写不错,打在电脑上发给我。
说到心理描写啊,这真是我自己都觉得信心十足的地方。
日本小说看多了算是影响写作的原因?
心理描写最重要的是能将自身的所思所想巧妙与环境结合表达出来。
感觉日本小说主流都差不多以强有力的心理描写为主,村上春树、太宰治即可为例。
写出来的大都是在一个大社会背景下自身的软弱无力,一种让人感到纤细的感觉。
这种写法的作家也有很多啊,美国的小说有很大一部分也是如此。
但不同就是,日本小说除了纤细外一无所有,外表表现出纤细,内心还是纤细,倘若无物。【纤细不妨理解为对外界环境极度敏感】
而至少,其他的作家在纤细的外表下是坚持,是不屈。
从这大概也能看出日本的社会状况的自杀率居高不下的一点原因吧。
曾经也看过一个段子,大意是说日本人善于承担责任,之后自杀谢之。
《菊与刀》将其解释为爱面子,倒不如说是缺乏韧力。
当然上面二位之所以能成为举世闻名的作家自然就不是这样的。就像太宰治,虽然每时每刻都绝望着,做好迎接死亡、自杀的准备,但是却仍努力活好当下的每一刻。

话说文艺复兴以降,都说人类历史上一个大进步是开始尊重人性。
我只是以为啊,其实各个民族都还存有所谓封建的束缚,人的自由还是没有真正意义上得到认可尊重。
我说的不是极少数地方,而是很多个民族。

万千思绪,不知所言。

乙未十月十九日。

又是一年复赛时

NOIp 2015'.
初赛就不多说了,真正考验水平的是复赛。
暑假时也参加了很多算法比赛,像cf啊bc啊什么的。
然而每次都只能做出水题Orz……
虽然看题解其实都是很水的题甚至暴力即可但比赛时我真的想不出来Orz……
现在文化课由于月考完了到复赛这俩星期还是有点时间可以放在OI上的。
当然导致的直接结果是我复赛后的时间绝对AFO以补上我月考连挂3科的Bad Ending。
所以不刷新题啦。把近五年复赛题码出来以及以前比赛的题码出来先咯=)
頑張って下さい、少年よ!
写在这里督促自己
<!--
<center>NOIp: <font color="red" size="30px">5</font> yrs left</center>
<center>BC: <font color="red" size="30px">6</font> rds left</center>
<center>Codevs: <font color="red" size="30px">4</font> rds left</center>
<center>More: Infinity left</center>
<center>CF: 英文题不做</center>-->

Codevs1074 食物链 带权并查集

1074 食物链 2001年NOI全国竞赛
时间限制: 3 s
空间限制: 64000 KB

题目描述 Description

动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。   

现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。   

有人用两种说法对这N个动物所构成的食物链关系进行描述:   

第一种说法是“1 X Y”,表示X和Y是同类。   

第二种说法是“2 X Y”,表示X吃Y。   

此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。   

1) 当前的话与前面的某些真的话冲突,就是假话;   

2) 当前的话中X或Y比N大,就是假话;   

3) 当前的话表示X吃X,就是假话。   

你的任务是根据给定的N(1<=N<=50,000)和K句话(0<=K<=100,000),输出假话的总数。

输入描述 Input Description
第一行是两个整数N和K,以一个空格分隔。   

以下K行每行是三个正整数D,X,Y,两数之间用一个空格隔开,其中 D 表示说法的种类。   

若D=1,则表示X和Y是同类。   

若D=2,则表示X吃Y。

输出描述 Output Description

只有一个整数,表示假话的数目。

样例输入 Sample Input

100 7

1 101 1

2 1 2

2 2 3

2 3 3

1 1 3

2 3 1

1 5 5

样例输出 Sample Output

3

玛德我的电脑突然间上不去vjudge了,成功阻碍了我的全线推倒并查集计划。
突然想到codevs有一道并查集于是就来推,成功1A.
毕竟人太弱只能来做这种不需要智商的傻叉带权并查集题。
把吃、同族、被吃的权赋为0、1、2就能满足一个合并时+2后%3得到新关系的良性质。
当然其它赋法也行,只是考虑情况忒多了点。

#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 5e5;
class Union
{
private:
    int fa[maxn], w[maxn];
    int find(int x)
    {
        if(fa[x] == -1)
            return x;
        int fx = find(fa[x]);
        w[x] = (w[fa[x]] + w[x] + 2) % 3;
        return fa[x] = fx;
    }
public:
    void clear(int n)
    {
        memset(fa, -1, sizeof fa);
        for(int i = 1; i <= n; i++)
            w[i] = 1;
    }
    bool test(int d, int x, int y)
    {
        int tx = find(x), ty = find(y);
        if(tx == ty)
        {
            return (w[x] + d - 1) % 3 == w[y];
        }
        fa[ty] = tx;
        w[ty] = (w[x] - w[y] - 3 + d) % 3;
        while(w[ty] < 0)
            w[ty] += 3;
        return true;
    }
} un;
int main()
{
    int n, k;
    cin>>n>>k;
    un.clear(n);
    int cnt = 0;
    while(k--)
    {
        int d, x, y;
        cin>>d>>x>>y;
        if(x > n || y > n || !un.test(d, x, y))
            cnt++;
    }
    cout<<cnt<<endl;
    return 0;
}