常州day3
Task1
小 W 得到了一堆石子,要放在 N 条水平线与 M 条竖直线构成的网格的交点上。
因为小 M 最喜欢矩形了, 小 W 希望知道用 K 个石子最多能找到多少四边平行于坐标轴的
长方形,它的四个角上都恰好放着一枚石子。
对于 100%的数据:N<=30000,保证任意两点不重合,K<=N*M
简单题,枚举即可
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n,m,k,ans,now,a,b,c,p,q;
int main(){
freopen("rectangle.in","r",stdin);
freopen("rectangle.out","w",stdout);
cin>>n>>m>>k;
for(int i=;i<=n;i++){
a=i;b=k/i;c=k%i;now=p=q=;
if(b>m) continue;
now=(a*(a-)/)*(b*(b-)/);
if(a<n){
if(c>b) continue;
p=now+c*(c-)/*a;
}
if(b<m){
if(c>a) continue;
q=now+c*(c-)/*b;
}
ans=max(ans,max(p,q));
}
cout<<ans;
return ;
}
Task 2
小 W 发现了一个神奇的数列: 这就是著名的 Fibonacci
Sequence = =!。
众所周知,小 M 的数学超级超级好,于是给小 W 出了一道题:
给小 W 两个数 X,Y,其中 X ≤ Y≤ 2^31−1。
小 W 任务就是求出 Fibonacci 数列第 X~Y 项的和除以 10000 的余数。
然而小 W 是数学战五渣,于是只能把这个任务交给机智的你啦。
对于 100%的数据:T<=1000,Y<=2^31-1
简单题,矩阵快速幂裸题
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#define il inline
using namespace std;
const int mod=;
int base[][],ans[][],tmp[][],s,t,T;
il void mul(int a[][],int b[][],int c[][]){
memset(tmp,false,sizeof(tmp));
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
tmp[i][j]=(tmp[i][j]+a[i][k]*b[k][j])%mod;
for(int i=;i<;i++)
for(int j=;j<;j++)
c[i][j]=tmp[i][j];
}
il int est(int n){
if(n==) return ;
if(n==) return ;
if(n==) return ;
memset(base,,sizeof(base));
memset(ans,,sizeof(ans));
ans[][]=ans[][]=ans[][]=;
base[][]=base[][]=base[][]=base[][]=base[][]=base[][]=;
for(int pow=n-;pow;pow>>=){
if(pow&) mul(ans,base,ans);
mul(base,base,base);
}
return (ans[][]+ans[][]+ans[][]*)%mod;
}
il void init(){
scanf("%d%d",&s,&t);
printf("%d\n",(mod+est(t)-est(s-))%mod);
}
int main(){
freopen("fibonacci.in","r",stdin);
freopen("fibonacci.out","w",stdout);
scanf("%d",&T);
for(int i=;i<=T;i++) init();
return ;
}
Task 3
小 W 千辛万苦做出了数列题,突然发现小 M 被困进了迷宫里。
迷宫是一个有 N(2≤N≤1000)个顶点 M(N−1≤M≤N∗(N − 1)/2 ) 条边的无向连通图。
设 dist1[i]表示在这个无向连通图中, 顶点 i 到顶点 1 的最短距离。
为了解开迷宫,现在要求小 W 在这个图中删除 M − (N − 1)条边,使得这个迷宫变成一
棵树。设 dist2[i]表示在这棵树中,顶点 i 到顶点 1 的距离。
小 W 的任务是求出有多少种删除方案,使得对于任意的 i,满足 dist1[i]=dist2[i]。
快点帮助小 W 救出小 M 吧!
对于 100%的数据:2≤N≤1000
最短路径树计数
预处理最短路
因为每个节点链接到从1出发的最短路的距离相等节点是等价的
所以直接统计即可
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
#include<queue>
#define il inline
using namespace std;
const int N=;
int n,m,M=,inq[N],d[N],p[N][N],g[N];
long long ans=;
queue<int> q;
struct edge{int next,to,val;
} e[];
struct data{int dist,id;
} b[N];
il void addedge(int x,int y,int z){
e[++M]=(edge){g[x],y,z};g[x]=M;
}
il bool cmp(data a,data b){
return a.dist<b.dist;
}
int main(){
freopen("treecount.in","r",stdin);
freopen("treecount.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)
p[i][j]=p[j][i]=(<<);
for(int i=,x,y,z;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
addedge(x,y,z);
addedge(y,x,z);
p[x][y]=p[y][x]=z;
}
for(int i=;i<=n;i++) d[i]=(<<);
memset(inq,false,sizeof(inq));
d[]=;q.push();
while(!q.empty()){
int h=q.front();q.pop();inq[h]=false;
for(int i=g[h];i;i=e[i].next)
if(d[e[i].to]>d[h]+e[i].val){
d[e[i].to]=d[h]+e[i].val;
if(!inq[e[i].to]){
inq[e[i].to]=true;
q.push(e[i].to);
}
}
}
for(int i=;i<=n;i++){
b[i].dist=d[i];
b[i].id=i;
}
sort(b+,b+n+,cmp);
for(int i=;i<=n;i++){
int cnt=;
for(int j=;j<i;j++)
if(b[j].dist+p[b[j].id][b[i].id]==b[i].dist)
cnt++;
ans=ans*cnt%2147483647ll;
}
cout<<ans;
return ;
}
常州day3的更多相关文章
- [日常训练]常州集训day3
T1 Description 有$K$个石子,石子只能放在$N$条水平线与$M$条竖直线构成的网格的交点上. 求用$K$个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子. ...
- 常州培训 day3 解题报告
第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...
- 【2016常州一中夏令营Day3】
小 W 摆石子[问题描述]小 W 得到了一堆石子,要放在 N 条水平线与 M 条竖直线构成的网格的交点上.因为小 M 最喜欢矩形了,小 W 希望知道用 K 个石子最多能找到多少四边平行于坐标轴的长方形 ...
- 冲刺阶段day3
day3 项目进展 今天周三,我们五个人难得的一整个下午都能聚在一起.首先我们对昨天的成果一一地查看了一遍,并且坐出了修改.后面的时间则是做出 登录界面的窗体,完善了登录界面的代码,并且实现了其与数据 ...
- python笔记 - day3
python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...
- python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理
python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...
- Spark菜鸟学习营Day3 RDD编程进阶
Spark菜鸟学习营Day3 RDD编程进阶 RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写 ...
- Spark Tungsten揭秘 Day3 内存分配和管理内幕
Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据 ...
- Catalyst揭秘 Day3 sqlParser解析
Catalyst揭秘 Day3 sqlParser解析 今天我们会进入catalyst引擎的第一个模块sqlparser,它是catalyst的前置模块. 树形结构 从昨天的介绍我们可以看到sqlPa ...
随机推荐
- RestQL:现代化的 API 开发方式
参考:https://tech.meituan.com/koa-restql.html 在现代的业务系统中,后端开发工作基本上可以被拆分为三项: 接口鉴权.例如判断是不是当前系统的用户,以及该用户是否 ...
- sqlserver(2012)清理tempdb
当数据库运行时间长了之后,tempdb变得特别大,几十G,受不了啊:当然我们知道重启 SQL Server服务的话,tempdb数据库会自动重新创建的,从而使 tempdb 回归到初始大小.但是这是生 ...
- sql server 查询所有被锁表并批量解除
废话不多说,直接上代码: --查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) table ...
- Cuteftp连接虚拟机Centos7
使用Centos7虚拟机时,想要从主机传一些文件到虚拟机,需要使用FTP传输,在主机上装上的CuteFTP的软件,对虚拟机进行配置. 1,首先,要保证虚拟机能够上网 一般装好虚拟机后,只要主机连了网, ...
- VisualSVN Server的配置和使用方法
VisualSVN Server的配置和使用方法 VisualSVN Server的配置和使用方法[服务器端] 安装好VisualSVN Server后[安装过程看这里],运行VisualSVN Se ...
- 在PHP中,是以分好结束一条语句的吗
在PHP中,是以分号结束一条语句的,这个和C语言类似. 但是,有一条例外,对于PHP结束tag之前的语句,是可以不写分号的: <?php if ($a == $b) { echo "R ...
- 过山车 HDU 2063 (二分图匹配裸题)
Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生 ...
- LCA最近公共祖先(Tarjan离线算法)
这篇博客对Tarjan算法的原理和过程模拟的很详细. 转载大佬的博客https://www.cnblogs.com/JVxie/p/4854719.html 第二次更新,之前转载的博客虽然胜在详细,但 ...
- Scrum立会报告+燃尽图(十月十六日总第七次):总结工作经验,商讨未来策略
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2197 Scrum立会master:李文涛 一.小组介绍 组长:付佳 组员 ...
- 03慕课网《vue.js2.5入门》——Vue-cli的安装,创建webpack模板项目
安装Vue-cli 第一种 貌似不可以,然后用了第二种,但是重装系统后,第二种不能用了,用了第一种可以 # 全局安装vue -cli命令npm install --global vue-cli # 创 ...