首页 > 编程语言 >2019 年百度之星·程序设计大赛 - 初赛三[1-3]

2019 年百度之星·程序设计大赛 - 初赛三[1-3]

时间:2023-05-31 10:03:29浏览次数:60  
标签:typedef const int 初赛 vis 2019 long 之星 mx


题目链接:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=863

 

A.

#include <bits/stdc++.h>
using namespace std;
const int mx = 2e5 + 10;
const int mod = 1e9+7;
typedef long long ll;

int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        printf("%d\n",n^1);
    }
    return 0;
}

B.

跑个最短路,然后剪剪枝就OK了。

#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int mx = 1e3 + 10;
const int mod = 998244353;
typedef long long ll;
typedef pair <int,int> pa;
vector <int> r;
vector <pa> g[mx];
ll d[mx][mx],dis[mx];
int c[mx][mx];
int n,m;
bool vis[mx];
void spfa(int beg){
    queue <int> q;
    for(int i=1;i<=n;i++)
        dis[i] = 1e16;
    dis[beg] = 0;
    q.push(beg);
    while(!q.empty()){
        int now = q.front();
        q.pop();
        vis[now] = 0;
        for(pa po:g[now]){
            int v = po.x,w = po.y;
            if(dis[v]>dis[now]+po.y){
                dis[v] = dis[now] + po.y;
                if(!vis[v]){
                    vis[v] = 1;
                    q.push(v);
                }
            }
        }
    }
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                c[i][j] = 0,d[i][j] = 1e16;
                if(i==j) d[i][j] = 0;
            }
            g[i].clear();
        }
        r.clear();
        for(int i=1;i<=m;i++){
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            d[u][v] = min(1ll*w,d[u][v]);
            d[v][u] = min(1ll*w,d[v][u]);
            g[v].push_back(pa(u,w));
            g[u].push_back(pa(v,w));
        }
        for(int k=1;k<=n;k++){
            spfa(k);
            r.clear();
            for(int i=1;i<=n;i++){
                if(dis[i]==d[k][i])
                    r.push_back(i);
                if(d[k][i]!=d[i][k]) cout << 1/0 << endl;
            }
            for(int i:r){
                for(int j:r){
                    ll tmp = d[i][k] + d[k][j];
                    if(tmp<d[i][j]){
                        d[i][j] = tmp;
                        c[i][j] = k;
                    }
                }
            }
        }
        ll ans = 0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                ans += c[i][j];
                //cout << dis[i][j] << endl;
            }
        }
        printf("%I64d\n",ans%mod);
    }
    return 0;
}

C.

利用莫比乌斯函数的性质和u(lcm(i,j)) = u(i)*u(j)*u(gcd(i,j))


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef complex<double> comp;
const double pi = acos(-1);
const int mx = 1e6+10;
const int mod = 1e9 + 7;
int mu[mx],pri[mx/10],pre[mx];
bool vis[mx];
vector <int> g[mx];
void init(){
    int top = 0;
    mu[1] = 1;
    for(int i=2;i<mx;i++){
        if(!vis[i]){
            pri[top++] = i;
            mu[i] = -1;
        }
        for(int j=0;j<top&&pri[j]*i<mx;j++){
            int val = i*pri[j];
            vis[val] = 1;
            if(i%pri[j]==0){
                mu[val] = 0;
                break;
            }
            mu[val] = -mu[i];
        }
    }
    for(int i=1;i<mx;i++){
        g[i].push_back(0);
        int sum = 0;
        for(int j=i;j<mx;j+=i){
            sum += mu[j];
            g[i].push_back(sum);
            pre[j] += mu[i]*mu[j/i];
        }
    }
}
int main()
{     
    init();
    int t;
    scanf("%d",&t);
    while(t--){
        int n,m;
        scanf("%d%d",&n,&m);
        int mi = min(n,m);
        ll ans = 0;
        for(int i=1;i<=mi;i++){
            ans += 1ll*pre[i]*g[i][n/i]*g[i][m/i];
        }
        printf("%lld\n",ans);
    }
    return 0;
}

 

标签:typedef,const,int,初赛,vis,2019,long,之星,mx
From: https://blog.51cto.com/u_12468613/6384515

相关文章

  • 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 201
    题目链接:https://vjudge.net/contest/339284#overview A.Numbers待做B.BrokenWatchs=input()s=s.split("")A,B,C,N=list(map(int,s))n=(N-1)//2ret=N*N*N-3*N*(n)*(n-1)-N-3*N*(N-1)ans=retmod=1<<64if(A==BandB==C):......
  • 题解 AT_nikkei2019ex_e【コラッツ問題】
    啥玩意,诈骗题还能这么诈骗。\(f(X)\)就是角谷猜想(冰雹猜想)所需的步数。根据角谷猜想,定义函数\(g\):\[g(X)=\begin{cases}\frac{X}{2},&2\midX\\3X+1,&2\nmidX\end{cases}\]则显然有\(f(g(X))=f(X)-1\)。样例二已经给出了\(f(X)=1000\)的解\(X=1789997546303\),而\(P......
  • [ZJOI2019]麻将
    dp套dp经典例题。这种题一般都是给你一个奇怪的合法条件,然后去做一些计数之类的东西,直接设计状态很不好做。我们考虑先设计一个判定合法的dp,以这个dp的状态和结果作为状态去dp。更一般的,我们发现dp的过程有初始状态和终止状态,转移看成有向边,可以建出一个自动机来。dp......
  • 专利之星完整版
    importrandomimporttimeimportpymysqlimportrequestsdict_area={'北京':'32','天津':'33','上海':'34','重庆':'35','河北':'5','山西':'6&#......
  • 【Oracle】Oracle Database Administration 2019 Certified Professional Certificati
     说明:1.目前题库100%覆盖考题,准确率84%。2.若需要优质烤券,请私信,留下你的WX。(官方250刀,本店只需要1500RMB包含100%完整题库以及考试经验分享)3.本条信息长期有效。考试题量:85通过分数:84%1、WhichtwoaretrueaboutreclaimingspaceusedbyFlashbacklogsinOracle......
  • 【蓝桥杯 2019 省 A】修改数组【并查集】
    链接https://www.luogu.com.cn/problem/P8686题意给你\(n\)个数a[1...n],从\(a_2\)开始,如果和之前的某个数具有相等的值,就一直让\(a_i=a_i+1\),直到前面的任何一个数都和它不相等\(1\leqn\leq10^5\),\(1\leqa_i\leq10^6\)问最后的序列是什么思路暴力做法......
  • WPS2019集美大学版v11.8.6.11825
    软件介绍WPSOffice2019增强版(wps集美大学专用版)是一款由大学教育机构定制的WPS企业版,wps2019政府版拥有正版授权,免激活可以长期使用.金山Office办公软件最新wps2019专业增强版wps2019永久激活版下载.软件截图版本特点WPS2019集美大学专用版:免激活、去水印、永久授权、......
  • Vivado2019.2下载(官网&百度云)与安装(手把手)
    龙芯杯对于vivado版本的要求:VivadoDesignSuiteHLWebPACK™版是革命性设计套件的免费版本。我们用它,能满足龙芯杯的需要,而且不用license区别如下:下载地址记得创建xilinx账号或者登陆!!!第一个是指下载一个exe之后,点击这个exe进行在线安装第二个是指把20几G的软件全部下到本地......
  • vivado2019.2新建工程点灯
    官方视频教程地址但是看b站的黑金视频更快些最后是靠这个教程点出来的new一个工程点next设置工程名字和路径,注意不要有中文和空格选择创建RTL工程点灯不需要添加外部的ip等文件,所以不用选,直接next先不加约束,点next用的是依元素公司的EES303开发板,芯片型号是XC7A35T-1CSG324C......
  • 2019字节笔试
     机器人跳跃问题机器人正在玩一个古老的基于DOS的游戏。游戏中有N+1座建筑——从0到N编号,从左到右排列。编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位。  起初,机器人在编号为0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能......