常州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 ...
随机推荐
- win2012r2 关闭中英文悬浮小方框显示
因为那是微软输入法自带的 2012下关不掉 所以切换成美式键盘就没有了
- stl源码分析之list
本文主要分析gcc4.8版本的stl list的源码实现,与vector的线性空间结构不同,list的节点是任意分散的,节点之间通过指针连接,好处是在任何位置插入删除元素都只需要常数时间,缺点是不能随 ...
- php 操作 oracle lob 数据2
CREATE SEQUENCE mylobs_id_seq NOMINVALUE NOMAXVALUE NOCYCLE CACHE 20 NOORDERINCREMENT ...
- 二、Django快速安装
一.安装Python 作为一个Python Web框架,Django依赖Python.从Django适用于哪些版本的Python可以获取更多信息.较新版本的Python内置一个轻量级的数据库SQLit ...
- 二叉树的宽度<java版>
二叉树的宽度 思路:层序遍历的时候,记录每层的节点数量,最后取记录中的最多的数量. 代码实现: public int solution(TreeNode node){ LinkedList<Tr ...
- POJ-3273(二分)
//题意:给出农夫在n天中每天的花费,要求把这n天分作m组, //每组的天数必然是连续的,要求分得各组的花费之和应该尽可能地小,最后输出各组花费之和中的最大值. //思路:看到各组最小和最大的,果断上 ...
- 关于购买Redis服务器:腾讯云、阿里云还是华为云?
个人分类: redis使用 编辑 新年伊始,很多商家都开始进行新年产品大促销,在分布是缓存Redis领域,几家大公司也是打得如火如荼,各有千秋啊. 现在市场上比较有口碑的商家有腾讯云.阿里云.华为云三 ...
- shell基础 -- grep、sed、awk命令简介
在 shell 编程中,常需要处理文本,这里介绍几个文本处理命令. 一.grep 命令 grep 命令由来已久,用 grep 命令来查找 文本十分方便.在 POSIX 系统上,grep 可以在两种正则 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音
<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...
- kaldi DNN在线解码 aishell为例
在kaldi 的工具集里有好几个程序可以用于在线识别.这些程序都位在src/onlinebin文件夹里,他们是由src/online文件夹里的文件编译而成(你现在可以用make ext 命令进行编译) ...