Loading

挂分导论

背景:一次模拟赛要将三个数乘起来取模,然后我神奇地将三个数乘完后再取模,\(100->40\)。于是王老师让我总结一下神奇的挂分方法。

至于为什么今天突发奇想将它写出来,原因是调题时再一次傻子了。

想到什么再写吧。


\(\text{for}\) 的初始化

for(int j = 1, u = s[j]; j <= n; j++){
	for(int k = head[u], v = e[k].to; k; k = e[k].nxt){
		...
	}
}

3k代码调了半天……


论取模

//p = 1e9,a,b,c在模p意义下进行
printf("%lld\n", 1ll * a * b * c % p);

就是文头案例。


论输出字符画

printf("^_^\n"); //但题面是 ^-^ 

论有无向图

大家都懂……

OI赛制太可爱了……

100 -> 30,正解沦落到暴力分

我:等等我的最短路怎么可能比答案还短?

我:等等这是有向图?!


论运算符优先级

for(int i = 0, l = strlen(str); i < l; i++){
	if((str[i] - '0') % 2 == 0) a[++al] = str[i] - '0';
    else b[++bl] = str[i] - '0';
}

for(; t; t >>= 1){
	if(t & 1 == 1) ...
}

论线段树

void build(int o, int l, int r){
	if(l == r) {s[o] = w[rnk[l]]; return;}
	int mid = l + r >> 1;
	build(o<<1, l, mid); build(o<<1|1, l+1, r);
	s[o] = (s[o<<1] + s[o<<1|1]) % p;
}

\(\text{stl}\) 的使用

n1 = unique(b+1, b+n+1) - b;

检查时生生把3个不同的数看成了4个

论膜意义下的加减法

int minus(int a, int b) {a += b; return a > p ? a-p : a;}
int add(int a, int b) {a -= b; return a < 0 ? a+p : a;}

一道板子调了两天。

\(\text{vector}\) 的正确使用

vector<int> a(n);
for(int i = 0; i <= n; i++)
	a[i] = 1ll * a[i] * a[i] % p;

论膜数

1e9+7 看成 \(998244353\),我的眼睛是出了什么问题……

\(\gcd\) 的正确写法

int gcd(int a, int b) {return b == 1 ? a : gcd(b, a%b);}

检查出来后的自己:???

函数不写返回值

日常错误,不想挂代码了 今天又写挂一次。

int phi(int n){
	int ans = n;
	for(int i = 2; i * i <= n; i++) if(n % i == 0)
		ans = ans / i * (i-1), while(n % i == 0) n /= i;
	if(n > 1) ans = ans / n * (n-1);
}

震惊的是本地能过样例。

关于板子

复制了一个错的板子上去……?

我:怎么老卡 30 呢?

我:等等这个板子是不是后来改了

关于前缀和

for(int j = 1; j <= n; j++) ++cnt[a[j]];
for(int j = 1; j <= m; j++) cnt[j] += cnt[j-1];
for(int j = n; j; j--) cnt[a[j]]--;

多次用开了前缀和的 \(cnt\) 却自以为清零了???

关于 freopen

freopen("1.out", "w", stdout);

%你赛 30 -> 0,差点冲到 rk3。

论插值的正确写法

在做多项式 inv 时试图把三个 \(n\) 次式子各取 \(n\) 个点值插成 \(n\) 次式子(膜 \(x^{n+1}\))。

我:???为什么系数加起来甚至不等于代入 \(1\) 然后乘起来???

再论线段树

if(l <= mid) modify(o<<1, l, mid, x, y);
if(r > mid) modify(o<<1|1, mid+1, r, x, y);

问号问号问号。

posted @ 2022-06-05 15:27  purplevine  阅读(78)  评论(0编辑  收藏  举报