FCS NOI2018 一试 GG记

T1

以为计算几何不会,

据说正解做法很玄学每条线段拆成若干点跑SPFA,取两个最小距离的点构成的线段继续做.

爆0

T2

据说是去年二试加强版

我写了dfs

最后10分

T3

先吐槽一下附中的老爷机,写了40的矩乘被卡成10分,搞得和暴力分一样

其次T3居然是BZOJ原题

最后10分

BZOJ3583

http://www.lydsy.com/JudgeOnline/problem.php?id=3583

#include<cstdio>
#include<cstdlib>
using namespace std;
const int mod=1e9+7;
int O[1001][21],I[1001][21];
int n,m,q,x,y,z,ans;
int f[1001];
struct matrix{
    int a[21][21];
    matrix(){
        for(register int i=0;i<m;++i)
            for(register int j=0;j<m;++j)
                a[i][j]=0;
    }
    inline matrix operator*(matrix A)const{
        matrix ret;
        for(register int i=0;i<m;++i)
            for(register int j=0;j<m;++j)
                for(register int k=0;k<m;++k)
                    ret.a[i][j]=(ret.a[i][j]+1ll*a[i][k]*A.a[k][j]%mod)%mod;
        return ret;
    }
    inline matrix operator+(matrix A)const{
        matrix ret;
        for(register int i=0;i<m;++i)
            for(register int j=0;j<m;++j){
                ret.a[i][j]=a[i][j]+A.a[i][j];
                if(ret.a[i][j]>=mod)
                    ret.a[i][j]-=mod;
            }
        return ret;
    }
}A[51],B[51],G,S;
inline void calc(int n){
    for(register int i=0;i<m;++i)
        for(register int j=0;j<m;++j)
            G.a[i][j]=S.a[i][j]=0;
    for(register int i=0;i<m;++i)
        G.a[i][i]=S.a[i][i]=1;
    for(register int i=0;i<=31;++i)
        if((n>>i)&1){
            S=S+(B[i]*G);
            G=G*A[i];
        }
}
int main(){
    scanf("%d%d",&n,&m);
    for(register int i=0;i<n;++i){
        for(register int j=0;j<m;++j)scanf("%d",O[i]+j),O[i][j]%=mod;
        for(register int j=0;j<m;++j)scanf("%d",I[i]+j),I[i][j]%=mod;
    }
    for(register int k=0;k<n;++k)
        for(register int i=0;i<m;++i)
            for(register int j=0;j<m;++j)
                A[0].a[i][j]=(A[0].a[i][j]+1ll*I[k][i]*O[k][j]%mod)%mod;
    B[0]=A[0];
    for(register int i=0;i<=31;++i){
        A[i+1]=A[i]*A[i];
        for(register int j=0;j<m;++j)
            ++A[i].a[j][j];
        B[i+1]=B[i]*A[i];
        for(register int j=0;j<m;++j)
            --A[i].a[j][j];
    }
    scanf("%d",&q);
    while(q--){
        scanf("%d%d%d",&x,&y,&z);--x;--y;
        if(!z){
            printf("%d\n",(x==y));
            continue;
        }
        calc(z-1);
        for(register int i=0;i<m;++i)f[i]=0;
        ans=0;
        for(register int i=0;i<m;++i)
            for(register int j=0;j<m;++j)
                f[i]=(f[i]+1ll*O[x][j]*S.a[j][i]%mod)%mod;
        for(register int i=0;i<m;++i)
            ans=(ans+1ll*I[y][i]*f[i]%mod)%mod;
        printf("%d\n",(ans+(x==y))%mod);
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/Stump/p/8449375.html

时间: 2024-10-22 02:37:46

FCS NOI2018 一试 GG记的相关文章

【FCS NOI2018】福建省冬摸鱼笔记 day6【FJOI 2018】福建省选混分滚蛋记 day1

记录一下day6发生的事情吧. 7:30 到达附中求索杯,被人膜,掉RP. 7:50 进考场,6楼的最后一排的最左边的位置,世界上最角落的地方,没有任何想法. 发现电脑时间和别人不一样,赶快调了一下. 8:00 等待发题. 8:03 题发了,为什么要迟发呢.=) 8:05-9:30 冥思苦想T1什么鬼东西.中间看了看T2T3是啥. 9:30-10:30 对T3的水震惊之余,把T3切掉了,顺便在准考证背面写了题解,准备给同学看看,以便带出去交流. 10:50-12:00 思考T2骗分,T2又是DN

【FCS NOI2018】福建省冬摸鱼笔记 day1

省冬的第一天. 带了本子,笔,一本<算法导论>就去了.惊讶于为什么同学不带本子记笔记. 他们说:"都学过了.",果然这才是巨神吧. 第一天:数论,讲师:zzx 前几页的课件挺水,瞎记了点笔记.后面直接就讲了两道题,我就没想出来,真的菜. 然后学了波原根,又听不太懂. 莫比乌斯反演,又听不太懂.然而我自己瞎推式子好像就能反演出来,没想法XD. 杜教筛,又听不太懂. 线性代数,zzx干脆不讲了,没想法.反正也不是数论范畴. 第一天的早晨就这么过去了,@qrc去AMC10了,没想

【FCS NOI2018】福建省冬摸鱼笔记 day2

第二天. 同学还是不带本子记笔记.dalao. 第二天:图论,讲师:@ExfJoe 全程划水,前面都讲水算法[虽然我可能已经忘记了]什么最短路,Tarjan,最小生成树,2SAT,差分约束啥的,我现在肯定写不出来啦. 后面题目也还挺好,可能是听的比较懂的一天吧.不过也很有挑战性. 中午划水 还以为下午的题目会和上午有关系,事实证明我想太多. T1想了个错误分块,写了n久挂了,不想调,正解主席树. T2简单数学题,瞎推式子就完了,后悔没有去做啊. T3毒瘤模拟题,什么切比雪夫,什么曼哈顿,什么奇偶

【FCS NOI2018】福建省冬摸鱼笔记 day3

第三天. 计算几何,讲师:叶芃(péng). dalao们日常不记笔记.@ghostfly233说他都知道了,就盼着自适应辛普森积分. 我计算几何基础不好--然而还是没怎么讲实现,感觉没听什么东西进去. 不过还是记了一些公式. 同时@ghostfly233在后面打农药. 然后讲到了有关圆的东西.讲完了,下课了.辛普森有兴趣的同学回去自己看看吧. 辛普森:??? @ghostfly233非常难受. 中午划水. 下午有一题和早上的有关. T1半平面交+面积,简单题,我半平面交写错了,只有80. T2

小毛驴(xml)试乘记(三):jQuery方法

jQuery可以像处理HTML的DOM那样处理xml,xml节点的存取就更简单一些. 这里需要三个文件. 第一,html文件,其中定义的显示数据的模板 第二,xml文件.数据本身. 第三,javascript文件.其中定义如何解释xml并将其添加到html文件之中. 有关注释附加在各文件相关行附近. html文件 <html> <head> <style type="text/css"> <!--css的定义--> body {font_

小毛驴(xml)试乘记(二):pl/sql方法

Oracle支持xml.可以用pl/sql加工xml数据. 下面的例子对xml加工后将其用dbms_output输出. 同理,也可将结果Insert到表里去. declare x xmltype := xmltype('<?xml version="1.0"?> <config> <!--在config和rules之间有许多数据,这里简化--> <devices> <entry> <vsys> <entry&

【FCS NOI2018】福建省冬摸鱼笔记 day4

第四天. 动态规划专题,讲师:闫神 讲了一些DP优化技巧,然而思想难度好大啊--根本没想到能优化那地步,连DP方程都没有呢. 不过有几题我还是想明白了. 讲了单调队列,决策单调性,四边形不等式,斜率优化,甚至有DP套DP,然而就是双重DP,什么背包+数位罢了. 轮廓线DP,插头DP都有点难写啊--不过也是状压DP的一大内容 .还有概率DP,期望DP,非常恐怖. 中午划水. 下午的题比较良心.T1不知道写了什么写挂了,T2就很好AC,T3毒瘤题. [T1] 题面:m个青蛙,它们可以跳无限远,但是第

毙彼敲搜览靥淤捶壤辰巧狄

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

三十多岁怎样积累财富

1. 为什么你该攒钱了 一个光明的财务未来对你来说很重要,因为你对自己退休和家庭未来的需要应该有个计划.另外,要实现你自己的财务目标,实现你的梦想,也需要一个计划. 如果你已经是30几岁,那么储蓄就是从现在开始最重要的事情了.成功人士之所以成功,就是因为他们很早就对他们的将来有个计划,也就是为了满足他们自己的目标和家庭需要,有一个全面的储蓄.积累财富的策略.剩下的人对此一无所知. 但如果你已经过了30岁这道门槛,也完全不必着急.管理财务.削减债务,何时都不晚.即便你的工作和事业还没到顶峰或最佳状