首页 > 其他分享 >2022/11/19 模拟赛总结

2022/11/19 模拟赛总结

时间:2022-11-19 14:13:59浏览次数:58  
标签:11 19 ll long int 逆元 2022 阶乘

day -1

老师说今早开家长会,我开始想今早模拟赛怎么打。
然后好像就是发了五道noip的题,最后又莫名其妙加了一个noip模拟赛。

day 0

本来说7:30起床,起晚了。
然后匆匆吃了点东西就开始打模拟赛。
与以往不同的是,本次比赛竟然使用的是 Lemon。
让我们自己在家评测。std、data之类的直接放我们这里。
然后 2735 就不停给我wx刷屏 T2 std。说这个代码可以骗分。
但是我没用。()
因为我一直很排斥符号题目,所以看到 T1 愣了一下。
“什么?t1就这些乱七八糟的?”
仔细分析了一下,发现就是一个等差数列求积取模。

开干。其实就是 a(a+d)(a+2d)(a+3d)...(a+(n-1)d),每个式子提一个d出来,最后来一个d的n次方。

其实一开始想去阶乘+前缀和,但是这个思路很快被该死的Gamma函数去掉了。为什么?Gamma我知道,分数阶乘,但是我不会。

然后只能继续将就了,就这样卡了十分钟。

然后?

哦!乘法逆元!

阶乘和乘法逆元提前预处理了一下,然后直接进去算式子。

然后就很快把代码写出来了。这个时候刚刚8点半,刚刚用了半小时。

调试一下:哦,我用了 unsigned long long,但是 printf("%ulld"),笑死我了,我是什么【】啊。

调试一下:哦,我模多了。

然后就一直在调bug.......................

忘了说了,乘法逆元中途忘记怎么写了,手推了二十分钟。

调bug+推逆元=1个小时

最后半小时把代码写出来了,大样例炸了,发现是预处理预处理多了,果断直接预处理 1~mod-1。为什么?mod开始可以由逆元转化为其他的阶乘。然后快速幂炸了,原来是 b>>=1 写成 b<<=1 了。该死。

这个时候已经10点了,两个小时,把代码整理了一下,提交了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxt=1e7+10;
int t, p;
int times[maxt];
int exgcd[maxt];

int Pow(int a, int b){
    int s=1;
    for (; b; b>>=1, a=(ll)a*a%p)
        if (b&1) s=(ll)s*a%p;
    return s;
}

int main(){
    freopen("story.in", "r", stdin);
    freopen("story.out", "w", stdout);
    scanf("%d %d", &t, &p);

    *times=1;
    for (int i=1; i<p; ++i) times[i]=(ll)times[i-1]*i%p;
    exgcd[p-1]=Pow(times[p-1], p-2);
    for (int i=p-1; i; --i) exgcd[i-1]=(ll)exgcd[i]*i%p;
    
    while (t--){
        int a, d, n;
        scanf("%d %d %d", &a, &d, &n);
        if (!d) printf("%d\n", Pow(a, n));
        else{
            a=(ll)a*exgcd[d]%p*times[d-1]%p;
            printf("%d\n", (!a || a+n>p) ? 0 : (ll)times[a+n-1]*exgcd[a-1]%p*Pow(d, n)%p);
        }
    }
    return 0;
}

第二题开题。题目一眼没用,没有被骗。发现了直接枚举字符串里所有 abcdcd 形状的种类输出即可。可惜没有写出 dp,还是太菜了。这个时候是11点。

第三题不会复杂背包,果断输出 Impossible。这个时候是11点25。

第四题线段树一点都不会,口胡了一个假思路,没写。这个时候是11点40。

摸鱼摸了20分钟,发现了VSCode扩展库里面的一些好东西。不得不说我从DEVC++换成VS是个明智的选择。因为我那个DEV是二次开发过的,RedPanda的一个劣质版本,往下滚轮都会出现那种 system("cls") 引起的间歇性刷新屏幕。

预估 [80,100]+0+[1,10]+0=[81,110]

最后是 100+0+9+0=109

总结:不能排斥符号堆砌的数学题。好多这种题都是唬人的,其实50行以内完事。背包、dp 还是大量刷大量刷,线段树不能不学了。

标签:11,19,ll,long,int,逆元,2022,阶乘
From: https://www.cnblogs.com/kth-element/p/16906012.html

相关文章