日记

日记

周二 12月 24 2024
927 字 · 7 分钟

我又双叒叕断更辣!

其实前面 33 天都差点更了

上午

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

考试链接 没有题解

T1

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

但是赛时代码是这样的:

#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;
}

改正后的代码是这样的:

#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 。


Thanks for reading!

日记

周二 12月 24 2024
927 字 · 7 分钟