挂分导论
背景:一次模拟赛要将三个数乘起来取模,然后我神奇地将三个数乘完后再取模,\(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);
问号问号问号。
本文来自博客园,作者:purplevine,转载请注明原文链接:https://www.cnblogs.com/purplevine/p/16344066.html