B Interesting paths

  考察范围:组合数学

  此题是机器人走方格的变种,n*m的网格,从(1,1)走到(n,m),首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条路径必须走n+m-2格,呢么只要确定竖直要走的,剩下的就是水平要走的,则答案为

  在Interseting paths要求左下角和右上角两个小矩阵不能走,则需要把整个网格依据两个小矩阵的水平和竖直边界分为两部分,依次运用组合数。例如

灰色区域之外为可走区域,分为两部分棕色,和黄色,则结果为

若是这种情况,则可分为两个

   

则结果为

所以需要两次分割,分别处理c到a和b到d。

因为n,m的范围比较大,可以提前预处理1到2*10^5的所有组合数和逆元。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#pragma GCC diagnostic error "-std=c++11"
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 998244353
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
typedef long long ll;
;
ll fic[],jie[];
ll t,n,m,a,b,c,d;
ll quick_pow(ll x,ll y){//求逆元
    ll ans=;
    while(y){
        ) ans=ans*x%mod;
        y>>=;
        x=x*x%mod;
    }
    return ans;
}
void get_fic(){
    fic[]=;
    jie[]=quick_pow(fic[],mod-);
    ;i<=;i++){
        fic[i]=fic[i-]*i%mod;
        jie[i]=quick_pow(fic[i],mod-);
    }
}
int main(){
    get_fic();//预处理所有值
    scanf("%lld",&t);
    while(t--){
        scanf("%lld%lld%lld%lld%lld%lld",&n,&m,&a,&b,&c,&d);
        ll ans=;
        ;i<a;i++){//竖直处理
            ll l=fic[b+i-]*jie[b-]%mod*jie[i-]%mod;
            ll r=fic[m-b+n-i-]*jie[m-b-]%mod*jie[n-i]%mod;
            ans=(ans+(l*r)%mod)%mod;
        }
        ;i<d;i++){//水平处理
            ll l=fic[c+i-]*jie[c-]%mod*jie[i-]%mod;
            ll r=fic[m-i+n-c-]*jie[m-i]%mod*jie[n-c-]%mod;
            ans=(ans+(l*r)%mod)%mod;
        }
        printf("%lld\n",ans);
    }
    ;
}

C 三角平方数

  设三角数为m,平方数为n则根据题意有n^2=(1/2)(m+1)m,化简可得 8n^2=4m^2+4m+1-1==>

(2m+1)^2-2(2n)^2=1

令x=2m+1,y=2n则有 x^2-2y^2=1可知为佩尔方程标准形式,特解为x=3,y=2,所以可以转化为矩阵乘法求任意一个解(佩尔方程)。

import java.util.*;
import java.io.*;
import java.math.*;
public class Main{
    static Scanner cin=new Scanner(System.in);
    static PrintWriter cout=new PrintWriter(System.out,true);
    public static BigInteger[][] multiply_matrix(BigInteger[][] a,BigInteger[][] b){
        BigInteger[][] c=new BigInteger[2][2];
        c[0][0]=BigInteger.valueOf(0);
        c[0][1]=BigInteger.valueOf(0);
        c[1][0]=BigInteger.valueOf(0);
        c[1][1]=BigInteger.valueOf(0);
        for(int i=0;i<2;i++)
            for(int j=0;j<2;j++)
                for(int k=0;k<2;k++)
                    c[i][j]=c[i][j].add(a[i][k].multiply(b[k][j]));
        return c;
    }
    public static BigInteger quick_pow(int y){
    BigInteger[][] ans=new BigInteger[2][2];
    BigInteger[][] pos=new BigInteger[2][2];
        ans[0][0]=BigInteger.valueOf(1);
        ans[0][1]=BigInteger.valueOf(0);
        ans[1][0]=BigInteger.valueOf(0);
        ans[1][1]=BigInteger.valueOf(1);
        pos[0][0]=BigInteger.valueOf(3);
        pos[0][1]=BigInteger.valueOf(4);
        pos[1][0]=BigInteger.valueOf(2);
        pos[1][1]=BigInteger.valueOf(3);
        while(y!=0){
            if(y%2==1) ans=multiply_matrix(ans,pos);
            y=y/2;
            pos=multiply_matrix(pos,pos);
        }
        return ans[1][0];
    }
    public static void main(String[] args){
        int n=cin.nextInt();
        BigInteger result=quick_pow(n);
        result=result.divide(BigInteger.valueOf(2));
        cout.println(result.multiply(result));
    }
}

F Star

  考察范围:最小生成树

  任意两个主星球之间都可以选择是否进行空间奇点压缩,选择不压缩就是三维排序,压缩就分别去掉x,y,z进行二维排序,最后跑最小生成树即可。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#pragma GCC diagnostic error "-std=c++11"
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) (memset(a,0,sizeof(a)))
typedef long long ll;
];
ll n,k;
struct f{
  ll x,y,z;
  int id;
}edge[];
struct node{
  int u,v;
  ll dis;
  bool operator<(const node &a) const{
    return a.dis>dis;
  }
}e[];
int find(int x){
  return fa[x]=(fa[x]==x?x:find(fa[x]));
}
bool cmp_xyz(f a,f b){//自定义排序
  return a.x+a.y+a.z<b.x+b.y+b.z;
}
bool cmp_xy(f a,f b){
  return a.x+a.y<b.x+b.y;
}
bool cmp_xz(f a,f b){
  return a.x+a.z<b.x+b.z;
}
bool cmp_yz(f a,f b){
  return a.z+a.y<b.z+b.y;
}
int main(){
  scanf("%lld%lld",&n,&k);
  ;i<n;i++){
    scanf("%lld%lld%lld",&edge[i].x,&edge[i].y,&edge[i].z);
    edge[i].id=i+;
  }
  ;i<=n;i++)
    fa[i]=i;
  ;
  sort(edge,edge+n,cmp_xyz);
  ;i<n;i++)
    e[ans++]=(node){edge[i].id,edge[i-].id,edge[i].x+edge[i].y+edge[i].z-edge[i-].x-edge[i-].y-edge[i-].z};
  sort(edge,edge+n,cmp_xy);
  ;i<n;i++)
    e[ans++]=(node){edge[i].id,edge[i-].id,edge[i].x+edge[i].y-edge[i-].x-edge[i-].y};
  sort(edge,edge+n,cmp_xz);
  ;i<n;i++)
    e[ans++]=(node){edge[i].id,edge[i-].id,edge[i].x+edge[i].z-edge[i-].x-edge[i-].z};
  sort(edge,edge+n,cmp_yz);
  ;i<n;i++)
    e[ans++]=(node){edge[i].id,edge[i-].id,edge[i].z+edge[i].y-edge[i-].z-edge[i-].y};
  ;
  sort(e,e+ans);
  ll inf=;
  ;i<ans && pos>;i++){//最小生成树kruskal写法
    int x=find(e[i].u);
    int y=find(e[i].v);
    if(x!=y){
      inf+=e[i].dis;
      fa[x]=y;
      pos--;
    }
  }
  printf("%lld\n",inf*k);
  ;
}

2018年江西理工大学C语言程序设计竞赛高级组部分题解的更多相关文章

  1. 2018年江西理工大学C语言程序设计竞赛(高级组) 三角平方数

    题目描述 三角数:形如图a,圆点摆放成等边三角形的数字,则为三角数. (图a) 平方数:形如图b,小方块摆放成正方形的数字,则为平方数. (图b) 那么如果一个数字既是三角形数又是平方数,则称为三角平 ...

  2. 2018年江西理工大学C语言程序设计竞赛(初级组)一

     C语言竞赛初级组第一.二场答案:https://www.cnblogs.com/xingkongyihao/p/10046918.html  A: 逆序对 时间限制: 1 s      内存限制:  ...

  3. 2014江西理工大学C语言程序设计竞赛高级组题解

    1001 Beautiful Palindrome Number 枚举回文数字前半部分,然后判断该数字是否满足,复杂度为O(sqrt(n))! 1002 Recovery Sequence  本题的核 ...

  4. 2017年江西理工大学C语言程序设计竞赛(高级组)

    问题 A: 求近似值 #include <stdio.h> #include <time.h> #include <stdlib.h> using namespac ...

  5. 2017年江西理工大学C语言程序设计竞赛(初级组)

    问题 A: Petr的盒子(初) #include <iostream> #include <stdio.h> #include <algorithm> using ...

  6. 2014江西理工大学C语言程序竞赛高级组

    Beautiful Palindrome Number 题意:求N里面有多少个符合要求的数字(数字要求:回文数,且前一半部分是不严格递增) 解法:打表 #include<bits/stdc++. ...

  7. 2016年江西理工大学C语言程序设计竞赛(高级组)

    问题 A: jxust 解法:争议的问题(是输入整行还是输入字符串),这里倾向输入字符串,然后判断是否含有jxust就行 #include<bits/stdc++.h> using nam ...

  8. 2016年江西理工大学C语言程序设计竞赛(初级组)

    问题 A: 木棒根数 解法:把所有的情况保存下来,加一下就好 #include<bits/stdc++.h> using namespace std; map<char,int> ...

  9. 2015年江西理工大学C语言程序设计竞赛(高级组)

    A 解法:DP+二分 dp[i]=max(dp[i],dp[j]+p[i].v)(i>j) dp[i]表示建立i点之后能够获得的最大值 int n,M; struct node { int l, ...

随机推荐

  1. Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案

    点关注,不迷路:持续更新Java架构相关技术及资讯热文!!! 相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码: 可以看到 userMapper 下有个红色警告.虽然代码本身并没有问题,能 ...

  2. xshell 连接 ubuntu 16.04报错

    outgoing encryption 错误   使用xshell和xftp连接 ubuntu 16.04 时出现找不到匹配的 outgoing encryption 算法的错误提示. 问题阐述: 在 ...

  3. Nginx+php-fpm 502 504问题

    常出现502,504错误 思路: 增大nginx与php-fpm通信时的缓存文件大小与个数 静态绑定5个php-fpm进程,减少频率启动进程的开销 利用sock文件代替tcp端口通信 解决办法: 调整 ...

  4. 如何安全使用公共Wifi,防止信息泄露?

    购物中心,机场,餐厅,咖啡馆,图书馆,公共交通,酒店客房均提供免费无线网络连接,这些网络每天被数百万人使用.然而,大多数人没有意识到的是,免费的公共Wi-Fi并不安全.即使需要密码才能登录,这并不一定 ...

  5. js中浏览器兼容startsWith 、endsWith 函数

    在做js开发的时候用到了startsWith函数时,发现各个浏览器不兼容问题,因为对开发来说,chrome浏览器最好用,就一直在chrome浏览器中使用这两个函数没有任何问题,但在ie浏览器访问就直接 ...

  6. UVA1585 - Score(紫书习题3.1)

    如何计算你们的得分呢?,如"OOXXOXXOOO". "O"表示问题的正确答案,"X"表示错误的答案.那么它得分是由它自己和它刚刚以前连续的 ...

  7. 简述JVM、JRE、JDK的关系及作用

    1.JVM:java虚拟机 . 作用:保证java语言跨平台. 2.JRE:java运行环境 jre=java虚拟机+核心类库. 作用:java程序的运行环境. 3.JDK :java开发工具集.JD ...

  8. Java启动问题-Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:1099

    环境一直跑的挺好的,突然报这么一个错误,百思不得其解. 网上查询之后才想起来,自己当时为了IE能运行浪潮服务器的远程console,将环境变量里面的java换成了32位版本的. 修改jre版本与环境变 ...

  9. 洛谷—— P1803 凌乱的yyy

    https://www.luogu.org/problem/show?pid=1803 题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的 ...

  10. 解决was6版本号过期问题

    原创作品.出自 "深蓝的blog" 博客,欢迎转载.转载时请务必注明出处.否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong ...