日记

日记

Tue Dec 24 2024
7 分钟

我又双叒叕断更辣!

其实前面 33 天都差点更了

上午#

考试。
不过这个考试还算是正常的考试,因为分数也是十分正常。
然而,我的 T1 因为没开 long long 爆了 6060 分。

考试链接没有题解

T1#

如上文所说:因为没开 long long 爆了 6060 分。

但是赛时代码是这样的:

CPP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<bits/extc++.h>
#define ll long long
// #define LOCAL
using namespace std;
const int maxn = 1.5e5 + 5;
int n,q;
ll a[maxn],b[maxn];
ll pre[maxn],sum;
signed main()
{
    #ifdef LOCAL
    freopen("perm.in","r",stdin);
    freopen("perm.out","w",stdout);
    #endif
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        b[i] = a[i];
    }
    cin >> q;
    sort(b + 1,b + n + 1);
    for (int i = 1; i <= n; i++)
    {
        sum += b[i] * i;
        pre[i] = pre[i - 1] + b[i];
    }
    int x,y;
    while (q--)
    {
        cin >> x >> y;
        if (a[x] < y)
        {
            int l = lower_bound(b + 1,b + n + 1,a[x]) - b;
            int r = lower_bound(b + 1,b + n + 1,y) - b - 1;
            ll tmp = sum - l * a[x] + r * y;
            tmp -= pre[r] - pre[l];
            cout << tmp << endl;
        }
        else if (a[x] > y)
        {
            int l = lower_bound(b + 1,b + n + 1,y) - b;
            int r = lower_bound(b + 1,b + n + 1,a[x]) - b;
            ll tmp = sum - r * a[x] + l * y;
            tmp += pre[r - 1] - pre[l - 1];
            cout << tmp << endl;
        }
        else
            cout << sum << endl;
    }
    #ifdef LOCAL
    fclose(stdout);
    cout << clock();
    #endif
    return 0;
}

改正后的代码是这样的:

CPP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<bits/extc++.h>
#define int long long
// #define LOCAL
using namespace std;
const int maxn = 1.5e5 + 5;
int n,q;
int a[maxn],b[maxn];
int pre[maxn],sum;
signed main()
{
    #ifdef LOCAL
    freopen("perm.in","r",stdin);
    freopen("perm.out","w",stdout);
    #endif
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        b[i] = a[i];
    }
    cin >> q;
    sort(b + 1,b + n + 1);
    for (int i = 1; i <= n; i++)
    {
        sum += b[i] * i;
        pre[i] = pre[i - 1] + b[i];
    }
    int x,y;
    while (q--)
    {
        cin >> x >> y;
        if (a[x] < y)
        {
            int l = lower_bound(b + 1,b + n + 1,a[x]) - b;
            int r = lower_bound(b + 1,b + n + 1,y) - b - 1;
            int tmp = sum - l * a[x] + r * y;
            tmp -= pre[r] - pre[l];
            cout << tmp << endl;
        }
        else if (a[x] > y)
        {
            int l = lower_bound(b + 1,b + n + 1,y) - b;
            int r = lower_bound(b + 1,b + n + 1,a[x]) - b;
            int tmp = sum - r * a[x] + l * y;
            tmp += pre[r - 1] - pre[l - 1];
            cout << tmp << endl;
        }
        else
            cout << sum << endl;
    }
    #ifdef LOCAL
    fclose(stdout);
    cout << clock();
    #endif
    return 0;
}

咱就是说:这里面也没有什么该开的没开是吧?一个 aa 数组,一个 bb 数组,都开了,还有一个 sumsumtmptmp 都开了啊,为何呢??

大概是那个 sum += b[i] * i; 没开导致吧?

T2#

打了一个假作法,骗了 55 分。还不如不打呢

T3 & T4#

赛时没看,赛后看了,挺简单的,但是赛时要想到还是有点难。

下午#

改题。

T1#

source

T1 也是十分简单,但是因为没开 long long 痛失 6060 分。

我决定把 #define int long long 打到缺省源里

T2#

source

T3#

source

虽然马周大佬的做法很简单,但是我还是更喜欢题解的 set 做法

T4#

source

虽然 kaka 的线段树十分好懂,但是我还是更喜欢哈希。

晚上#

晚上,因为[NOIP2012 提高组] 开车旅行没改,于是又被祝老荣幸提名了一遍。但是一看题解,只能对着行数 120\ge 120 的代码犯恶心。

但是对着那个又臭又长的代码调了一晚上,死因是没开 long long 。我简直是。。。

然后,和 long long 斗争到底的一天就这么结束了

才没有呢。

半夜#

由于今天晚上有 edu ,所以我还得到学校待到十一二点。但是,xguaguayzp 都回去了,就剩我一个人在机房凌乱。

希望这次能够多打几题,多涨点 rated 。