2019银川F,ccpc威海D - Sternhalma 2022

news2024/10/5 22:23:47

1401D - Maximum Distributed Tree

求每个边经过的次数,假设求u,v这条边的次数,边的左端是u这个集合一共有n-siz[v]个点,右端是v这个集合有siz[v]个端点,经过这条边的次数就是siz[v]*(n-siz[v]),然后再按照次数多的乘以大的质因数就可以了,注意m可能大于n-1

D. Maximum Distributed Tree(贪心+树dfs)_小菜鸡加油的博客-CSDN博客

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define pause system("pause")
#define int long long
const int mod=1e9+7;
const int inf=1e18;
const int N = 4e5+100;
const double eps=1e-10;

int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
int getinv(int a){return qpow(a,mod-2LL);}
int head[N],cnt;
struct Edge
{
    int next,to;
}e[N];
void addedge(int from,int to)
{
    e[++cnt].next=head[from];
    e[cnt].to=to;
    head[from]=cnt;
}
int siz[N],t,n,m,p[N],a[N],ct;
bool cmp(int a,int b){return a>b;}
void dfs(int u,int fa)
{
    siz[u]=1;
    for(int i=head[u];i;i=e[i].next)
    {
        int j=e[i].to;
        if(j==fa) continue;
        dfs(j,u);
        siz[u]+=siz[j];
        a[++ct]=siz[j]*(n-siz[j]);
    }
}
signed main()
{
    //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++) siz[i]=head[i]=0;cnt=ct=0;
        for(int i=1;i<n;i++)
        {
            int u,v;cin>>u>>v;
            addedge(u,v);addedge(v,u);
        }
        dfs(1,0);
        cin>>m;
        for(int i=1;i<=m;i++) cin>>p[i];
        
        int ans=0;
        if(m<=ct)
        {
            sort(a+1,a+ct+1,cmp);
            sort(p+1,p+m+1,cmp);
            for(int i=m+1;i<=ct;i++) p[i]=1;
            for(int i=1;i<=ct;i++)
            {
                ans=(ans+(p[i]*a[i]%mod))%mod;
                //cout<<ans<<" "<<p[i]<<" "<<a[i]<<endl;
            }
        }
        else
        {
            //cout<<"sss"<<endl;
            sort(a+1,a+ct+1);
            sort(p+1,p+m+1);
            int tmp=1;
            for(int i=ct+1;i<=m;i++) tmp=tmp*p[i]%mod;
            p[ct]=p[ct]*tmp%mod;
            for(int i=ct;i>=1;i--)
            {
                ans=(ans+(p[i]*a[i]%mod))%mod;
               // cout<<ans<<" "<<p[i]<<" "<<a[i]<<endl;
            }
        }
        cout<<ans<<endl;
        for(int i=1;i<=max(ct,m);i++) p[i]=a[i]=0;
    }
    pause;
    return 0;
}

F. Function! 2019银川,类似整除分块

因为当b>a的时候,\log_{b}{a}都是小于1的,上取整之后就是1,所以整个式子就变成

\sum_{a}^{n}a\sum_{b=a}^{n}\log_{a}{b},当a>\sqrt{n}时,1<=\log_{a}{b}<2=>\log_{a}{b}=1,所以右边的求和其实就是(n-a+1),这玩意是可以化简得,\sum_{a}^{n}a(n-a+1)=\sum_{a}^{n}(n+1)a-a^{2}=(n+1)\sum_{a}^{n}a-\sum_{a}^{n}a^{2},

一个是等差数列求和,一个是平方和,这就可以o(1)得算出来了;

然后a<=\sqrt{n}时直接暴力算,但发现对于一个b,会有一段连续的a log值时一样的,所以可以利用类似整除分块的思想来优化一下;

2019ICPC(银川) - Function!(数论+数学分块)_Frozen_Guardian的博客-CSDN博客

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define pause system("pause")
#define int long long
const int mod=998244353;
const int inf=1e18;
const int N = 4e5+100;
const double eps=1e-10;

int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
int getinv(int a){return qpow(a,mod-2LL);}
int n;
int cal(double a,double b)
{
    return floor(log2(b)/log2(a));
}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    cin>>n;
    int ans=0,a;
    for(a=2;a*a<=n;a++)
    {
        int tmp=0;
        int qp=a;
        int x=1;
        for(int b=a;b<=n;b++)
        {
            int d=min(n,qp*a-1LL);
            tmp=(tmp+x*((d-b+1)%mod)%mod)%mod;
            b=d;
            qp*=a;x++;
            //cout<<b<<endl;
        }
        ans=(ans+tmp*a%mod)%mod;
    }
    //cout<<ans<<endl;
    a--;
    int x1=((n%mod)*((n+1)%mod)%mod)*getinv(2)%mod;
    int x2=((a%mod)*((a+1)%mod)%mod)*getinv(2)%mod;
    int y1=(((n%mod)*((n+1)%mod)%mod)*(((n%mod)*2LL%mod+1)%mod)%mod)*getinv(6)%mod;
    int y2=(((a%mod)*((a+1)%mod)%mod)*(((a%mod)*2LL%mod+1)%mod)%mod)*getinv(6)%mod;
    int x=((n+1)%mod)*((x1-x2+mod)%mod)%mod;
    int y=(y1-y2+mod)%mod;
    int res=(x-y+mod)%mod;
    ans=(ans+res)%mod;
    //cout<<res<<endl;
    cout<<ans<<endl;
    pause;
    return 0;
}

D - Sternhalma 2022ccpc威海

一共就19个格子,并且每个格子的权值是不会变的,所以可以记忆化加状压,这题就是一个带状压的记忆化搜索,但是实现雀氏有点难,直接看代码就可以

2022CCPC威海站 铜牌题解 A C D E G I J - 知乎 (zhihu.com)

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define lowbit(x) ((x)&(-x))
#define int long long
#define pause system("pause")
const int mod=998244353;
const int inf=1e18;
const int N = 1e6+100;
const double eps=1e-10;

int qpow(int a,int b)
{
    int res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
int sgn(double x)
{
    if(fabs(x)<eps) return 0;
    else if(x<0) return -1;
    else return 1;
}
int getinv(int a){return qpow(a,mod-2LL);}
int d[][2]={1,1,-1,-1,1,-1,-1,1,0,2,0,-2,2,0,-2,0};
int d2[][2]={-1,-1,1,1,-1,1,1,-1,0,-2,0,2,-2,0,2,0};
vector<pair<int,int>>coord=
{
    {1,3},{1,5},{1,7},
    {2,2},{2,4},{2,6},{2,8},
    {3,1},{3,3},{3,5},{3,7},{3,9},
    {4,2},{4,4},{4,6},{4,8},
    {5,3},{5,5},{5,7}
};
int s[10][10],id[10][10],vis[N],f[N],n;
int tran(string s)
{
    int res=0;
    for(int i=0;i<s.length();i++)
    {
        int x=0;
        if(s[i]=='#') x=1;
        res+=x*(1<<i);
    }   
    return res;
}
int dfs(int state)
{
    if(vis[state]) return f[state];
    int val=f[state];
    for(int i=0;i<19;i++)
    {
        int x=(state>>i)&1;
        if(x==0) continue;
        int nstate=state&(~(1<<i));
        val=max(val,dfs(nstate));
    }
    int g[10][10];
    for(int i=0;i<19;i++)
    {
        auto [x,y]=coord[i];
        g[x][y]=state>>i&1;
    }
    for(int i=0;i<19;i++)
    {
        if((state>>i&1)==0) continue;
        auto [x,y]=coord[i];
        for(int j=0;j<6;j++)
        {
            int ax=x+d[j][0],ay=y+d[j][1];
            int bx=x+d2[j][0],by=y+d2[j][1];
            if(ax<0||ay<0||bx<0||by<0) continue;
            if(id[ax][ay]==-1||id[bx][by]==-1) continue;
            if(g[ax][ay]==0||g[bx][by]==1) continue;
            int nstate=state;g[ax][ay]=g[x][y]=0;g[bx][by]=1;
            nstate=nstate&(~(1<<id[ax][ay]));
            nstate=nstate&(~(1<<id[x][y]));
            nstate=nstate|(1<<id[bx][by]);
            val=max(val,dfs(nstate)+s[x][y]);
            g[ax][ay]=g[x][y]=1;g[bx][by]=0;
        }
    }
    vis[state]=1;
    return f[state]=val;
}

signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    memset(id,-1,sizeof(id));
    for(int i=0;i<19;i++)
    {
        auto [x,y]=coord[i];
        id[x][y]=i;
        cin>>s[x][y];
    }
    vis[0]=1;
    f[0]=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        string t="",g;
        for(int j=1;j<=5;j++) cin>>g,t+=g;
        int ans=dfs(tran(t));
        cout<<ans<<endl;
    }
    pause;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【附源码】Python计算机毕业设计汽车租赁管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Go 语言中的 Moduels 管理(Let‘s Go 三十四)

在 Go 1.11以前使用包管理一直被开发者所诟病。既然GOPATH这种包管理引起了一线开发者的一片骂声&#xff0c;所以&#xff0c;Go官方体恤一线开发者对GOPATH这种包管理的情绪&#xff0c;一直致力努力提供对一线开发者友好的包管理解决方法而奋斗。从最初的GOPATH到GO VENDOR&…

基于遗传算法、元胞自动机邻域和随机重启爬山混合优化算法(GA-RRHC)的柔性车间调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

LeetCode50天刷题计划第二季(Day 27 — 寻找旋转排序数组中的最小值(9.50- 11.20)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、题目寻找旋转排序数组中的最小值示例提示&#xff1a;二、思路三、代码前言 芜湖 一、题目 寻找旋转排序数组中的最小值 已知一个长度为 n 的数组&#…

web前端期末大作业——基于HTML+CSS+JavaScript实现中国茶文化(30页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

大数据开发是做什么的?怎样入门?

其实现在有很多小伙伴看中了大数据的发展前景&#xff0c;但是其实不知道大数据开发具体是做什么的&#xff0c;又该怎么学习&#xff1f;学习了之后又该做什么&#xff1f; 下面具体给你分析下大数据开发是做什么的&#xff0c;又需要学习和掌握哪些技能~ 大数据开发做什么&a…

致远OA ajax.do 任意文件上传 (CNVD-2021-01627) 漏洞复现

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓01 漏洞描述02 影响范围03 验证方式04 利用方式05 修复方案01 漏洞描述 致远OA是一套办公协同管理软件。由于致远OA旧版本某些接口存在未授权访问&#xff0c;以及部分函数存在过滤不足&#xff0c;攻…

大数据实战之前戏

开发背景 因为要开发一套通话详单系统。该系统上每天产生1亿条通话话单&#xff0c;要保存一个月的通话话单。也就是保存30亿条通话&#xff0c;能够做到准实时的通话详单查询。于是采用大数据架构进行话单的保存和查询。 服务器规划 为了验证系统的可用性&#xff0c;我先搭…

从零学习 InfiniBand-network架构(七) ——IB协议中数据如何传输

从零学习 InfiniBand-network架构&#xff08;七&#xff09; —— IB协议中数据如何传输 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;未经作者允许&#xff0c;禁止转载 &#x1f6a9;本专题部分内容源于《InfiniBand-n…

C++ 智能指针最佳实践源码分析

智能指针在 C11 标准中被引入真正标准库&#xff08;C98 中引入的 auto_ptr 存在较多问题&#xff09;&#xff0c;但目前很多 C开发者仍习惯用原生指针&#xff0c;视智能指针为洪水猛兽。但很多实际场景下&#xff0c;智能指针却是解决问题的神器&#xff0c;尤其是一些涉及多…

QT之Windows开发及源码调试环境搭建

QT之Windows开发及源码调试环境搭建1. QT 安装2. 配置源码调试2.1 QTCreator2.2 Visual Studio 20193. 参考1. QT 安装 QT对5.15以及以上版本提供在线安装工具 官方链接清华镜像&#xff0c;但是这里面没由Windows的在线安装工具(2022/11/11查看的时候没有) 这里安装以QT 5.…

全是狠活!SpringBoot文档也太那个了,图文并茂详尽讲解

前沿 SpringBoot是由Pivotal团队提供的在Spring框架基础之上开发的框架&#xff0c;其设计目的是用来简化应用的初始搭建以及开发过程。 SpringBoot本身并不提供Spring框架的核心特性以及扩展功能&#xff0c;只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是…

【JavaSE】继承

文章目录1. 如何继承2. 子类如何访问父类的成员2.1 子类中访问父类的成员变量2.2 子类中访问父类的成员方法3. super关键字4. 如何写构造方法前言&#xff1a;为方便讲解一个java文件写多个类。 1. 如何继承 class Cat {public String name;public int age;public String sex;…

c++基础篇(一篇文章带你进入c++的新手村)

前沿&#xff1a; c作为目前比较的流行的语言之一&#xff0c;在就业上也是运用比较广泛的语言之一&#xff0c;并且经过这么多年的历练久经不衰&#xff0c;所以说选择学c是一个不错的选择^_^&#xff0c;前面看到一个段子&#xff0c;如何在21天精通c&#xff0c;我动态里有这…

git 记录

git 工作区介绍 workspace&#xff1a;工作区&#xff0c;就是平时存放项目代码的地方。Index/Stage&#xff1a;暂存区&#xff0c;用于临时存放你的改动&#xff0c;事实上只是一个文件&#xff0c;保存即将提交到文件列表信息。Repository&#xff1a;仓库区&#xff08;或版…

单机hbase-2.4.15配置snappy压缩

单机hbase配置snappy压缩 前言 1. 过程比较坎坷&#xff0c;网上帖子说法不一&#xff0c;以下过程是参考几个帖子亲自走过一遍&#xff0c;并最终可以成功建表。2. 本人安装的所有目录均为/data/test-hbase&#xff0c;涉及目录的替换为自己的目录即可。参考连接 https://bl…

【黑马程序员】Redis 课程 P37 的练习_三种方式实现功能_【黑马点评项目】给店铺类型查询业务添加缓存

本博客内容对应的视频为&#xff1a;https://www.bilibili.com/video/av766995956/?p37补充介绍&#xff1a;【黑马点评项目】是黑马官方于 2022-02-28 在 BiliBili 发表的学习视频教程的练手项目 1.简介 练习&#xff1a;给店铺类型查询业务添加缓存 店铺类型在首页和其它多…

栈和队列(顺序表、单链表形式)

栈和队列栈栈.顺序表结构体的设计栈的初始化栈的销毁入栈出栈获取栈顶数据判断栈空栈中有效元素的个数Stack.hStack.ctest.c栈.单链表结构体设计栈的初始化栈的销毁入栈出栈获取栈顶元素判断栈是否为空获取栈中元素个数Stack.hStack.ctest.c队列队列.顺序表结构体的设计队列的初…

学生HTML个人网页作业作品 简单的IT技术个人简历模板html下载 简单个人网页设计作业 静态HTML个人博客主页

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Python老手也会犯的20个新手级错误

Python编码时应避免的常见错误 编程&#xff08;不仅Python&#xff0c;也包括其它编程语言&#xff09;最好的一点是&#xff0c;有多种方法来实现同一解决方案。 使用不同的方法来达到相同的结果&#xff08;图像由作者绘制&#xff09; 由于下述原因&#xff0c;有些方法会比…