题面:https://www.cnblogs.com/Juve/articles/11639923.html

simple:

考试时只想到的暴力exgcd判断

考虑n,m互质的情况:

我们枚举y,对于方程$n*x+m*y \leq q$,$x\leq\frac{q-m*y}{n}$

其中y的范围是[0,n-1],因为如果y大于n-1,那么可以使x的系数加一,会有重复

然后如果n,m不互质,那么设$n=n'*gcd(n,m),m=m'*gcd(n,m)$,所以$n'*gcd(n,m)*x+m'*gcd(n,m)*y \leq q$

其中把$gcd(n,m)*y$看成一个整体,那么枚举y的范围要保证$gcd(n,m)*y\in[0,n-1]$

然后就A了

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=1e5+;
int t,n,m,q,ans;
int gcd(int a,int b){
return b==?a:gcd(b,a%b);
}
int max(int a,int b){return a>b?a:b;}
signed main(){
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld",&n,&m,&q);
int g=gcd(n,m);
ans=;
for(int i=;i<(n/g);++i){
int x=q-i*m;
if(x<) break;
ans+=x/n+;
}
printf("%lld\n",q-(ans-));
}
return ;
}

walk:

枚举gcd,然后把边权是gcd倍数的边建出来,形成一个森林,求出森林的直径即是答案为gcd时的边的长度

注意一点,有些长度可能不会出现在最长链中,因为他是构成最长链的一部分,所以如果这个长度的答案<长度大于他的答案的话,就要将长度大于他的答案给他,从大到小枚举ans[i]=max(ans[i],ans[i+1]).

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int MAXN=4e5+5;
const int MAXM=1e6+5;
int n,maxx=0,res[MAXN],len=0;
vector< pair<int,int> >e[MAXM];
int to[MAXN<<1],nxt[MAXN<<1],pre[MAXN],cnt=0;
void add(int u,int v){
++cnt,to[cnt]=v,nxt[cnt]=pre[u],pre[u]=cnt;
}
bool vis[MAXN];
int sta[MAXM],top=0;
int dfs(int x,int fa){
vis[x]=1;
int l=0,r=0;
for(int i=pre[x];i;i=nxt[i]){
int y=to[i];
if(y==fa||vis[y]) continue;
int p=dfs(y,x);
if(p+1>l) r=l,l=p+1;
else if(p+1>r) r=p+1;
}
len=max(len,l+r);
return l;
}
int main(){
scanf("%d",&n);
for(int i=1,u,v,w;i<n;++i){
scanf("%d%d%d",&u,&v,&w);
maxx=max(maxx,w);
e[w].push_back(make_pair(u,v));
}
for(int i=1;i<=maxx;++i){
cnt=0;
for(int j=i;j<=maxx;j+=i){
int N=e[j].size();
for(int k=0;k<N;++k){
int u=e[j][k].first,v=e[j][k].second;
add(u,v),add(v,u);
sta[++top]=u,sta[++top]=v;
}
}
for(int j=1;j<=top;++j){
if(!vis[sta[j]]){
len=0;
dfs(sta[j],0);
res[len]=max(res[len],i);
}
}
for(int j=1;j<=top;++j){
pre[sta[j]]=vis[sta[j]]=0;
}
top=0;
}
for(int i=n-1;i>=1;--i) res[i]=max(res[i],res[i+1]);
for(int i=1;i<=n;++i) printf("%d\n",res[i]);
return 0;
}

棋盘:

容斥一发推式子:

$ans=\sum\limits_{i=2}^{n}(-1)^i*A_{n}^{i}$

再加个高精度

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define re register
using namespace std;
const int MAXN=;
int n,mp[MAXN][MAXN];
struct bigint{
int m[];
inline friend bigint operator * (re bigint a,re int b){
re int x=;
for(re int i=;i<=a.m[];i++){
re int y=a.m[i]*b+x;
a.m[i]=y%;
x=y/;
}
while(x){
a.m[++a.m[]]=x%;
x/=;
}
return a;
}
inline friend void operator += (re bigint &a,re bigint b){
a.m[]=max(a.m[],b.m[])+;
for(re int i=;i<=a.m[];++i)
a.m[i]+=b.m[i];
for(re int i=;i<=a.m[];++i)
if(a.m[i]>) a.m[i]-=,++a.m[i+];
while(a.m[]!=&&a.m[a.m[]]==)
--a.m[];
}
inline friend bigint operator - (re bigint a,re bigint b){
re bigint c;
re int i=;
while((i<=a.m[])||(i<=b.m[])){
if(a.m[i]<b.m[i]){
a.m[i]+=;
a.m[i+]--;
}
c.m[i]=a.m[i]-b.m[i];
i++;
}
while(c.m[i]==&&i>)
i--;
c.m[]=i;
return c;
}
inline friend bigint operator * (re bigint a,re bigint b){
re bigint c;
memset(c.m,,sizeof(c.m));
c.m[]=a.m[]+b.m[]+;
for(re int i=;i<=a.m[];++i){
for(re int j=;j<=b.m[];++j){
c.m[i+j-]+=a.m[i]*b.m[j];
}
}
for(re int i=;i<=c.m[];++i){
if(c.m[i]>) c.m[i+]+=c.m[i]/,c.m[i]%=;
}
while(c.m[]!=&&c.m[c.m[]]==) --c.m[];
return c;
}
}fac[MAXN],C[MAXN][MAXN],ans;
inline void print(bigint a){
for(re int i=a.m[];i>=;--i){
printf("%d",a.m[i]);
}
puts("");
}
signed main(){
//freopen("test.in","r",stdin);
//freopen("ans.out","w",stdout);
scanf("%d",&n);
for(re int i=;i<=n;++i){
for(re int j=,k;j<=n;++j){
scanf("%d",&k);
mp[i][j]=k;
}
}
fac[].m[]=fac[].m[]=;
for(re int i=;i<=n;++i) fac[i]=fac[i-]*i;
C[][].m[]=C[][].m[]=;
for(re int i=;i<=n;++i){
C[i][].m[]=C[i][].m[]=;
for(re int j=;j<=i;++j){
C[i][j]=C[i-][j];
C[i][j]+=C[i-][j-];
//C[i][j]=C[i-1][j]+C[i-1][j-1];
}
}
/*for(int i=1;i<=n;++i){
for(int j=0;j<=i;++j){
print(C[i][j]);
}
puts("");
}*/
ans=fac[n];
for(re int i=;i<=n;++i){
if(i&) ans=ans-C[n][i]*fac[n-i];
else ans+=C[n][i]*fac[n-i];
//ans+=C[n][i];
}
print(ans);
return ;
}

csp-s模拟65Simple,Walk, Travel,棋盘题解的更多相关文章

  1. [CSP模拟测试43、44]题解

    状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一 ...

  2. [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)

    题目链接: http://172.16.0.132/senior/#contest/show/2530/1 题目: EZ同学家里非常富有,但又极其的谦虚,说话又好听,是个不可多得的人才.        ...

  3. 蓝桥杯大学B组省赛2020模拟赛(一)题解与总结

    题目链接:https://www.jisuanke.com/contest/6516 A:题目: 我们称一个数是质数,而且数位中出现了 5 的数字是有趣的. 例如 5, 59, 457.求1到1000 ...

  4. WC2019 全国模拟赛第一场 T1 题解

    由于只会T1,没法写游记,只好来写题解了... 题目链接 题目大意 给你一个数列,每次可以任取两个不相交的区间,取一次的贡献是这两个区间里所有数的最小值,求所有取法的贡献和,对 \(10^9+7\) ...

  5. BZOJ3076 & 洛谷3081:[USACO2013 MAR]Hill Walk 山走——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3076 https://www.luogu.org/problemnew/show/P3081#sub ...

  6. NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2题解

    上星期打的...题有点水,好多人都AK了 T1排个序贪心就好了 #include<iostream> #include<cstring> #include<cstdlib ...

  7. [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)

    题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...

  8. [CSP-S模拟测试]:Walk(树的直径+数学)

    题目描述 给定一棵$n$个节点的树,每条边的长度为$1$,同时有一个权值$w$.定义一条路径的权值为路径上所有边的权值的最大公约数.现在对于任意$i\in [1,n]$,求树上所有长度为$i$的简单路 ...

  9. [CSP-S模拟测试]:Walk(BFS+建边)

    题目描述 在比特镇一共有$n$个街区,编号依次为$1$到$n$,它们之间通过若干条单向道路连接. 比特镇的交通系统极具特色,除了$m$条单向道路之外,每个街区还有一个编码${val}_i$,不同街区可 ...

随机推荐

  1. JVM内核-原理、诊断与优化学习笔记(一):初识JVM

    文章目录 JVM的概念 JVM是Java Virtual Machine的简称.意为Java虚拟机 虚拟机 有哪些虚拟机 VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM ...

  2. 29-Ubuntu-远程管理命令-03-SSH工作方式简介

    在Linux中SSH是非常重要的工具,通过SSH客户端可以连接到运行了SSH服务器的远程机器上. 1.SSH客户端是一种使用Secure Shell(SSH)协议连接到远程计算机的软件程序. 2.SS ...

  3. Deep Dive into Neo4j 3.5 Full Text Search

    In this blog we will go over the Full Text Search capabilities available in the latest major release ...

  4. 随笔-ansible-3

    关于循环的一些事: 是否是因为模块的原因? item适用于copy,但不适用于yum.虽然出现了警告,但并不表示不能用.功能还是不受影响的. 在上例中,我们使用了yum.copy.service模块( ...

  5. jdk1.8新特性学习

    package com.xll.code.jdk1_8study; import com.xll.code.jdk1_8study.pojo.User; import org.junit.jupite ...

  6. note : Get FilePathName from FILE_OBJECT

    转自:http://blog.csdn.net/lostspeed/article/details/11738311 封了一个函数, 从 FILE_OBJECT 中 得到 FilePathName 在 ...

  7. FCC知识点总结

    1.DOMContentLoaded事件 2.延迟脚本 defer 3.异步脚本async 4.[找最长单词]—— 找出句子中最长的单词,并返回它的长度. 5.数组slice().splice() s ...

  8. Python连接数据库流行用到的第三方库

    Python连接数据库流行用到的第三方库: mysqldb:只支持Python2.x mysqlclient : mysqldb的衍生版本,完全兼容mysqldb,同时支持Python3.x,安装较复 ...

  9. MySQL学习 EXISTS的用法 转载

    比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID ...

  10. gevent实现并发

    #_author:来童星#date:2019/12/12import geventimport timedef func1(): print('\033[31;1mfun1 starting...\0 ...