Task1

小 W 得到了一堆石子,要放在 N 条水平线与 M 条竖直线构成的网格的交点上。
因为小 M 最喜欢矩形了, 小 W 希望知道用 K 个石子最多能找到多少四边平行于坐标轴的
长方形,它的四个角上都恰好放着一枚石子。

对于 100%的数据:N<=30000,保证任意两点不重合,K<=N*M

简单题,枚举即可

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. typedef long long ll;
  8. ll n,m,k,ans,now,a,b,c,p,q;
  9. int main(){
  10. freopen("rectangle.in","r",stdin);
  11. freopen("rectangle.out","w",stdout);
  12. cin>>n>>m>>k;
  13. for(int i=;i<=n;i++){
  14. a=i;b=k/i;c=k%i;now=p=q=;
  15. if(b>m) continue;
  16. now=(a*(a-)/)*(b*(b-)/);
  17. if(a<n){
  18. if(c>b) continue;
  19. p=now+c*(c-)/*a;
  20. }
  21. if(b<m){
  22. if(c>a) continue;
  23. q=now+c*(c-)/*b;
  24. }
  25. ans=max(ans,max(p,q));
  26. }
  27. cout<<ans;
  28. return ;
  29. }

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

简单题,矩阵快速幂裸题

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<iostream>
  5. #include<algorithm>
  6. #include<string.h>
  7. #define il inline
  8. using namespace std;
  9. const int mod=;
  10. int base[][],ans[][],tmp[][],s,t,T;
  11. il void mul(int a[][],int b[][],int c[][]){
  12. memset(tmp,false,sizeof(tmp));
  13. for(int i=;i<;i++)
  14. for(int j=;j<;j++)
  15. for(int k=;k<;k++)
  16. tmp[i][j]=(tmp[i][j]+a[i][k]*b[k][j])%mod;
  17. for(int i=;i<;i++)
  18. for(int j=;j<;j++)
  19. c[i][j]=tmp[i][j];
  20. }
  21. il int est(int n){
  22. if(n==) return ;
  23. if(n==) return ;
  24. if(n==) return ;
  25. memset(base,,sizeof(base));
  26. memset(ans,,sizeof(ans));
  27. ans[][]=ans[][]=ans[][]=;
  28. base[][]=base[][]=base[][]=base[][]=base[][]=base[][]=;
  29. for(int pow=n-;pow;pow>>=){
  30. if(pow&) mul(ans,base,ans);
  31. mul(base,base,base);
  32. }
  33. return (ans[][]+ans[][]+ans[][]*)%mod;
  34. }
  35. il void init(){
  36. scanf("%d%d",&s,&t);
  37. printf("%d\n",(mod+est(t)-est(s-))%mod);
  38. }
  39. int main(){
  40. freopen("fibonacci.in","r",stdin);
  41. freopen("fibonacci.out","w",stdout);
  42. scanf("%d",&T);
  43. for(int i=;i<=T;i++) init();
  44. return ;
  45. }

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出发的最短路的距离相等节点是等价的

所以直接统计即可

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<stdlib.h>
  4. #include<algorithm>
  5. #include<math.h>
  6. #include<string>
  7. #include<string.h>
  8. #include<queue>
  9. #define il inline
  10. using namespace std;
  11. const int N=;
  12. int n,m,M=,inq[N],d[N],p[N][N],g[N];
  13. long long ans=;
  14. queue<int> q;
  15. struct edge{int next,to,val;
  16. } e[];
  17. struct data{int dist,id;
  18. } b[N];
  19. il void addedge(int x,int y,int z){
  20. e[++M]=(edge){g[x],y,z};g[x]=M;
  21. }
  22. il bool cmp(data a,data b){
  23. return a.dist<b.dist;
  24. }
  25. int main(){
  26. freopen("treecount.in","r",stdin);
  27. freopen("treecount.out","w",stdout);
  28. scanf("%d%d",&n,&m);
  29. for(int i=;i<=n+;i++)
  30. for(int j=;j<=n+;j++)
  31. p[i][j]=p[j][i]=(<<);
  32. for(int i=,x,y,z;i<=m;i++){
  33. scanf("%d%d%d",&x,&y,&z);
  34. addedge(x,y,z);
  35. addedge(y,x,z);
  36. p[x][y]=p[y][x]=z;
  37. }
  38. for(int i=;i<=n;i++) d[i]=(<<);
  39. memset(inq,false,sizeof(inq));
  40. d[]=;q.push();
  41. while(!q.empty()){
  42. int h=q.front();q.pop();inq[h]=false;
  43. for(int i=g[h];i;i=e[i].next)
  44. if(d[e[i].to]>d[h]+e[i].val){
  45. d[e[i].to]=d[h]+e[i].val;
  46. if(!inq[e[i].to]){
  47. inq[e[i].to]=true;
  48. q.push(e[i].to);
  49. }
  50. }
  51. }
  52. for(int i=;i<=n;i++){
  53. b[i].dist=d[i];
  54. b[i].id=i;
  55. }
  56. sort(b+,b+n+,cmp);
  57. for(int i=;i<=n;i++){
  58. int cnt=;
  59. for(int j=;j<i;j++)
  60. if(b[j].dist+p[b[j].id][b[i].id]==b[i].dist)
  61. cnt++;
  62. ans=ans*cnt%2147483647ll;
  63. }
  64. cout<<ans;
  65. return ;
  66. }

常州day3的更多相关文章

  1. [日常训练]常州集训day3

    T1 Description 有$K$个石子,石子只能放在$N$条水平线与$M$条竖直线构成的网格的交点上. 求用$K$个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子. ...

  2. 常州培训 day3 解题报告

    第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...

  3. 【2016常州一中夏令营Day3】

    小 W 摆石子[问题描述]小 W 得到了一堆石子,要放在 N 条水平线与 M 条竖直线构成的网格的交点上.因为小 M 最喜欢矩形了,小 W 希望知道用 K 个石子最多能找到多少四边平行于坐标轴的长方形 ...

  4. 冲刺阶段day3

    day3 项目进展 今天周三,我们五个人难得的一整个下午都能聚在一起.首先我们对昨天的成果一一地查看了一遍,并且坐出了修改.后面的时间则是做出 登录界面的窗体,完善了登录界面的代码,并且实现了其与数据 ...

  5. python笔记 - day3

    python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...

  6. python_way,day3 集合、函数、三元运算、lambda、python的内置函数、字符转换、文件处理

    python_way,day3 一.集合 二.函数 三.三元运算 四.lambda 五.python的内置函数 六.字符转换 七.文件处理 一.集合: 1.集合的特性: 特性:无序,不重复的序列 如果 ...

  7. Spark菜鸟学习营Day3 RDD编程进阶

    Spark菜鸟学习营Day3 RDD编程进阶 RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写 ...

  8. Spark Tungsten揭秘 Day3 内存分配和管理内幕

    Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据 ...

  9. Catalyst揭秘 Day3 sqlParser解析

    Catalyst揭秘 Day3 sqlParser解析 今天我们会进入catalyst引擎的第一个模块sqlparser,它是catalyst的前置模块. 树形结构 从昨天的介绍我们可以看到sqlPa ...

随机推荐

  1. win2012r2 关闭中英文悬浮小方框显示

    因为那是微软输入法自带的   2012下关不掉  所以切换成美式键盘就没有了

  2. stl源码分析之list

    本文主要分析gcc4.8版本的stl list的源码实现,与vector的线性空间结构不同,list的节点是任意分散的,节点之间通过指针连接,好处是在任何位置插入删除元素都只需要常数时间,缺点是不能随 ...

  3. php 操作 oracle lob 数据2

    CREATE SEQUENCE mylobs_id_seq    NOMINVALUE    NOMAXVALUE    NOCYCLE    CACHE 20    NOORDERINCREMENT ...

  4. 二、Django快速安装

    一.安装Python 作为一个Python Web框架,Django依赖Python.从Django适用于哪些版本的Python可以获取更多信息.较新版本的Python内置一个轻量级的数据库SQLit ...

  5. 二叉树的宽度<java版>

    二叉树的宽度 思路:层序遍历的时候,记录每层的节点数量,最后取记录中的最多的数量. 代码实现: public int solution(TreeNode node){ LinkedList<Tr ...

  6. POJ-3273(二分)

    //题意:给出农夫在n天中每天的花费,要求把这n天分作m组, //每组的天数必然是连续的,要求分得各组的花费之和应该尽可能地小,最后输出各组花费之和中的最大值. //思路:看到各组最小和最大的,果断上 ...

  7. 关于购买Redis服务器:腾讯云、阿里云还是华为云?

    个人分类: redis使用 编辑 新年伊始,很多商家都开始进行新年产品大促销,在分布是缓存Redis领域,几家大公司也是打得如火如荼,各有千秋啊. 现在市场上比较有口碑的商家有腾讯云.阿里云.华为云三 ...

  8. shell基础 -- grep、sed、awk命令简介

    在 shell 编程中,常需要处理文本,这里介绍几个文本处理命令. 一.grep 命令 grep 命令由来已久,用 grep 命令来查找 文本十分方便.在 POSIX 系统上,grep 可以在两种正则 ...

  9. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  10. kaldi DNN在线解码 aishell为例

    在kaldi 的工具集里有好几个程序可以用于在线识别.这些程序都位在src/onlinebin文件夹里,他们是由src/online文件夹里的文件编译而成(你现在可以用make ext 命令进行编译) ...