首页 > 其他分享 >2023.6.4拷逝

2023.6.4拷逝

时间:2023-06-04 21:35:43浏览次数:36  
标签:node int sum long times 2023.6 拷逝 dis

# T1

首先题目没有强制让我们一起算 $k^{r(p)}+r^2(p)$ ,我们可以把它拆成两部分,一部分是 $k^{r(p)}$ ,一部分是 $r^2(p)$ 。

考虑递推求解两个部分。先看第一个部分。设 $n$ 的全排列的逆序对个数分别是 $p_1,p_2,...,p_{n!}$ ,并假设我们已经知道 $k^{r(p)}$ 的值。现在新增一个数 $n+1$ ,如果它是最后一个数,那么新形成的排列的逆序对个数分别是 $p_1,p_2,...,p_{n!}$ ;如果它是倒第二个数,那么新形成的排列逆序对个数分别是 $p_1+1,p_2+1,...,p_{n!}+1$ ......如果它是第一个数,那么新形成的排列的逆序对个数分别是 $p_1+n,p_2+n,...,p_{n!}+n$ 。这时新的 $\sum k^{r(p')}$ 的结果应该是 $\sum k^{r(p)}\times (1+k+k^2+...+k^n)$

再看第二个部分。新的 $\sum r^2(p')$ 应该是 $\sum r^2(p)\times (n+1)+(2+4+...+2n)\times \sum r(p)+n!\times (1^2+2^2+3^2+...+n^2)$ 。但这时我们引入了 $\sum r(p')$ ,还需要同时更新它。 $\sum r(p')=(1+2+...+n)\times n!+\sum r(p)\times (n+1)$ .

处理好这两部分后,直接相加就是答案。时间复杂度$O(n+t)$ .

$code:$

#include<iostream>
#include<cstdio>
using namespace std;
const long long mod=1e9+7;
long long n,t,k,fac,ans1[5],ans2[5],ans3[5];
int main(){
    //freopen("concert.in","r",stdin);
    //freopen("concert.out","w",stdout);
    scanf("%lld",&t);
    while(t--){
        scanf("%lld%lld",&n,&k);
        ans1[1]=1;ans2[1]=ans3[1]=0;//1:k^n,2:n^2,3:n
        long long sum=1,sum2=0,p=1;
        fac=1;
        for(long long i=2;i<=n;++i){
            p=p*k%mod;
            sum=(sum+p)%mod;
            ans1[i&1]=(ans1[(i-1)&1]*sum)%mod;
        }
        for(long long i=2;i<=n;++i){
            fac=fac*(i-1)%mod;
            sum2=(sum2+(i-1)*(i-1)%mod)%mod;
            ans3[i&1]=(fac*(i*(i-1)/2%mod)%mod+(i*ans3[(i-1)&1]%mod))%mod;
            ans2[i&1]=ans2[(i-1)&1]*i%mod;
            ans2[i&1]=(ans2[i&1]+((ans3[(i-1)&1]*i%mod*(i-1)%mod)%mod))%mod;
            ans2[i&1]=(ans2[i&1]+(fac*sum2%mod))%mod;
        }
        printf("%lld\n",(ans1[n&1]+ans2[n&1])%mod);
    }
    fclose(stdin);fclose(stdout);
    return 0;
}

 

# T2

新建一个超级源点,将超级源点和所有朋友连边,跑最短路,输出每个点的路径长度$-1$即可。

 

$code:$

 

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int l=100005;
int n,m,k,u,v,tot,pos[l],nxt[l*20],ver[l*20],head[l*20],ans[l],vis[l],dis[l];
struct node{
    int to,w;
    friend bool operator < (node a,node b){
        return a.w>b.w;
    };
};priority_queue <node> q;
void add(int x,int y){
    nxt[++tot]=head[x];head[x]=tot;ver[tot]=y;
} 
void bfs(int x){
    q.push((node){x,0});dis[x]=0;
    while(!q.empty()){
        node f=q.top();q.pop();
        if(vis[f.to])
            continue;
        vis[f.to]=1;
        for(int i=head[f.to];i;i=nxt[i]){
            int y=ver[i];
            if(dis[y]>dis[f.to]+1){
                dis[y]=1+dis[f.to];
                q.push((node){y,dis[y]}); 
            }
        }
    }
}
int main(){
    //freopen("39c5bb.in","r",stdin);
    //freopen("39c5bb.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=m;++i){
        scanf("%d%d",&u,&v);
        add(u,v);add(v,u);
    }
    for(int i=1;i<=n;++i)
        ans[i]=1e9;
    bool ok=1;
    for(int i=1;i<=k;++i)
        scanf("%d",&pos[i]),add(0,pos[i]),add(pos[i],0);
    for(int i=0;i<=n;++i)
        vis[i]=0,dis[i]=1e9;
    bfs(0);
    for(int i=1;i<=n;++i)
        printf("%d ",dis[i]-1);
    printf("\n"); 
    fclose(stdin);fclose(stdout);
    return 0;
} 

 

标签:node,int,sum,long,times,2023.6,拷逝,dis
From: https://www.cnblogs.com/andyl/p/17456384.html

相关文章

  • 2023.6 做题笔记
    【集训队互测2023】森林游戏He_Renorz把得分重新定义:先手选一个数,增加得分,后手减小得分,先手想最大化得分,后手想最小化得分。先考虑一个特殊情况:森林中的每一棵树都是一条链,且每条链从前往后不增。两个人的策略都是选择能选的点中权值最大的,也就是说这个森林等价于将所有权值......
  • 2023.6.3 自学kali渗透测试1
     首先sudosu进入根用户,然后msfconsole然后searchms_17_010 然后use0//使用0号模块 2.设置必选项 //require为yes的为必选项setRHOSTS[目的IP]    //前提是在同一局域网//*RHOSTS为targethost(s)代表你要攻击谁 setpayloadwindows/x64/meterperte......
  • 2023.6.2 统计范围内的元音字符串数
    可以用前缀和解。首先建立一个前缀和数组prefix,令n为words的长度,那么prefix的长度就是n+1。(将下标0空出来)然后遍历words中的每一项,如果该项符合规则,则prefix[i]=prefix[i-1]+1,否则prefix[i]=prefix[i-1。(意味着,这个位置有一个字符串可以提供1个贡献)最后遍历querie......
  • 2023.6.2linux系统文件查找
    03.Linux系统⽂件查找⽂件查找概述find名称查找find⼤⼩查找find时间查找find⽤户查找find类型查找find权限查找find处理动作Authorvx:WingspanGo⽂件查找概述Linux系统中的find命令在查找⽂件时⾮常有⽤⽽且⽅便。它可以根据不同的条件来进⾏查找⽂件:例如⽂件......
  • 2023.6.3——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 2023.6.2
    数据库的关系模式的设计 设有关系模式:教师授课(课程号,课程名,学分,教师号,教师名,职称,授课时数,授课学年),其语义为:一门课程(由课程号决定)有确定的课程名和学分,每名教师(由教师号决定)有确定的教师名和职称,每门课程可以由多名教师讲授,每名教师也可以讲授多门课程,在同一学年每个教师对......
  • 2023.6.2——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午考web。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 2023.6.1——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 2023.6.1-软件工程课程总结
    回顾我的课程计划:我在开学第一周提出的计划是,达到王建民老师的最基本要求,软件工程这门课取得及格的好成绩。对于这个计划,我觉得我应该大致完成了王建民老师的最基本要求,计划的前一部分应该是做到了。关于后面一部分取得及格的好成绩,我觉得我应该也能够完成,软件工程这门课应该可以......
  • 2023.4.12拷逝
    #T1seq首先这道题要注意对题意的理解,子序列的意思是子集,而不是子区间。我们可以将序列从小到大排序。排序后,如果一个子序列只有$a[i]$,$a[j]$$(i<j)$和任意多个在$a[i]$和$a[j]$之间的数,那么这个子序列的权值就是$a[i]\timesa[j]$。这样的序列有$2^{j-i-1}$个。由此......