日记

日记

Tue Dec 24 2024
8 分钟
1101 字

我又双叒叕断更辣!

其实前面 33 天都差点更了

上午 Link to 上午

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

考试链接没有题解

T1 Link to 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 Link to T2

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

T3 & T4 Link to T3 & T4

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

下午 Link to 下午

改题。

T1 Link to T1

source

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

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

T2 Link to T2

source

T3 Link to T3

source

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

T4 Link to T4

source

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

晚上 Link to 晚上

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

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

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

才没有呢。

半夜 Link to 半夜

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

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