T1

Description

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

Input

第一行三个整数$N,M,K$。

Output

一个非负整数,即最多的满足条件的长方形数量。

Sample Input

3 3 8

Sample Output

5

HINT

$N\;\leq\;30000$,保证任意两点不重合,$K\;\leq\;N\;\times\;M$

Solution

很显然,最佳的方案长这样

$xxx…xxx$             $xxx…xxx$

$xxx…xxx$             $xxx…xxx$

……           或      ….

$xxx…xxx$             $xxx…xxx$

$xxx…x$               $xxx…xxx$

设上面两个图形的大多数行的个数为$l$,枚举$l$,$ans=max(c(k/l,2)\;\times\;c(l,2)+c(k$%$l,2)\;\times\;k/l)(1<l\;\leq\;max(n,m))$。

这题本弱有写过原题,但是考场上还是想错了QAQ

  1. #include<cmath>
  2. #include<ctime>
  3. #include<stack>
  4. #include<queue>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cstring>
  8. #include<cstdlib>
  9. #include<iostream>
  10. #include<algorithm>
  11. using namespace std;
  12. typedef long long ll;
  13. ll n,m,k,sum,ans;
  14. inline bool chk(ll x,ll y){
  15. return max(x,y)<=n&&min(x,y)<=m;
  16. }
  17. inline ll c2(ll k){
  18. return k*(k-)>>;
  19. }
  20. inline void init(){
  21. scanf("%lld%lld%lld",&n,&m,&k);
  22. if(n<m){
  23. ll t=m;m=n;n=t;
  24. }
  25. for(ll i=n,x,y;i>;i--){
  26. x=k/i;y=k%i;
  27. if(!chk(i,x+(y>))||!x) continue;
  28. sum=c2(x)*c2(i)+c2(y)*x;
  29. ans=max(ans,sum);
  30. }
  31. printf("%lld\n",ans);
  32. }
  33. int main(){
  34. freopen("rectangle.in","r",stdin);
  35. freopen("rectangle.out","w",stdout);
  36. init();
  37. fclose(stdin);
  38. fclose(stdout);
  39. return ;
  40. }

T2

Description

求$Fibonacci$数列第$X-Y$项的和除以$10000$的余数。

Input

第一行一个整数$T$,表示数据组数。
接下来$T$行,每行两个数$X,Y$,意义如题所述。

Output

$T$行,每行是一个询问的答案。

Sample Input

2

1 5

127 255

Sample Output

12

5976

HINT

$T\;\leq\;1000,X\;\leq\;Y\;\leq\;2^{31}−1$

Solution

$X,Y$这么大,很容易会想到矩乘。

$s[i]=s[i-1]+f[i]=s[i-1]+f[i-1]+f[i-2]$。

人生第一道当场A的矩乘题,感动QAQ

  1. #include<cmath>
  2. #include<ctime>
  3. #include<stack>
  4. #include<queue>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cstring>
  8. #include<cstdlib>
  9. #include<iostream>
  10. #include<algorithm>
  11. #define M 10000
  12. using namespace std;
  13. struct matrix{
  14. int a[][],n,m;
  15. }a,b,c;
  16. int l,r,s1,s2,t;
  17. inline matrix mul(matrix a,matrix b){
  18. matrix c;c.n=a.n;c.m=b.m;
  19. for(int i=;i<=c.n;i++)
  20. for(int j=;j<=c.m;j++)
  21. c.a[i][j]=;
  22. for(int i=;i<=c.n;i++)
  23. for(int j=;j<=c.m;j++)
  24. for(int k=;k<=c.n;k++){
  25. c.a[i][j]+=a.a[i][k]*b.a[k][j];
  26. c.a[i][j]%=M;
  27. }
  28. return c;
  29. }
  30. inline matrix po(matrix a,int k){
  31. matrix c;c.m=a.m;c.n=a.n;
  32. for(int i=;i<=c.n;i++)
  33. for(int j=;j<=c.m;j++)
  34. if(i!=j) c.a[i][j]=;
  35. else c.a[i][j]=;
  36. while(k){
  37. if(k&) c=mul(a,c);
  38. a=mul(a,a);k>>=;
  39. }
  40. return c;
  41. }
  42. inline void init(){
  43. scanf("%d",&t);
  44. a.m=a.n=b.n=;b.m=;
  45. a.a[][]=a.a[][]=a.a[][]=;
  46. a.a[][]=a.a[][]=a.a[][]=;
  47. b.a[][]=;b.a[][]=b.a[][]=;
  48. while(t--){
  49. scanf("%d%d",&l,&r);
  50. if(l<=) s1=l-;
  51. else{
  52. c=mul(po(a,l-),b);
  53. s1=c.a[][];
  54. }
  55. if(r<=) s2=r;
  56. else{
  57. c=mul(po(a,r-),b);
  58. s2=c.a[][];
  59. }
  60. printf("%d\n",(s2-s1+M)%M);
  61. }
  62. }
  63. int main(){
  64. freopen("fibonacci.in","r",stdin);
  65. freopen("fibonacci.out","w",stdout);
  66. init();
  67. fclose(stdin);
  68. fclose(stdout);
  69. return ;
  70. }

T3

Description

给定一个$N$个顶点,$M$条边的无向连通图。

设$dist1[i]$表示在这个无向连通图中,顶点$i$到顶点$1$的最短距离。

求在这张图中,有多少棵大小为$N$的树满足对于任意的$i$,$dist1[i]=dist2[i]$($dist2[i]$表示在这棵树中,顶点$i$到顶点$1$的距离)。

Input

第一行,两个整数,$N,M$,表示有$N$个顶点和$M$条边。
接下来有$M$行,每行有$3$个整数$x,y,len(1\;\leq\;x,y\;\leq\;n,1\;\leq\;len\;\leq\;100)$,

表示顶点$x$和顶点$y$有一条长度为$len$的边。

数据保证不出现自环、重边。

Output

一行两个整数,表示满足条件的方案数$mod\;2147483647$的答案。

Sample Input

3 3

1 2 2

1 3 1

2 3 1

Sample Output

2

HINT

$2\;\leq\;N\;\leq\;1000,N−1\;\leq\;M\;\leq\;N\;\times\;(N−1)/2$

Solution

$tot[i]$表示到达点$i$满足$dis2[j]+g[j][i]=dis2[i]$的点数。

用$Dijkstra$实现即可。

考场上记录答案的方式写错了导致炸到只剩20QAQ

  1. #include<cmath>
  2. #include<ctime>
  3. #include<stack>
  4. #include<queue>
  5. #include<cstdio>
  6. #include<vector>
  7. #include<cstring>
  8. #include<cstdlib>
  9. #include<iostream>
  10. #include<algorithm>
  11. #define N 1005ll
  12. #define M 1000005ll
  13. #define K 2147483647ll
  14. using namespace std;
  15. typedef long long ll;
  16. struct graph{
  17. ll nxt,to,w;
  18. }e[M];
  19. ll g[N],dis[N],tot[N],n,m,ans,cnt;
  20. bool v[N];
  21. inline ll read(){
  22. ll ret=;char c=getchar();
  23. while(!isdigit(c))
  24. c=getchar();
  25. while(isdigit(c)){
  26. ret=ret*+c-'';
  27. c=getchar();
  28. }
  29. return ret;
  30. }
  31. inline void addedge(ll x,ll y,ll w){
  32. e[++cnt].nxt=g[x];g[x]=cnt;
  33. e[cnt].to=y;e[cnt].w=w;
  34. }
  35. inline void init(){
  36. n=read();m=read();
  37. for(ll i=,j,k,l;i<=m;i++){
  38. j=read();k=read();l=read();
  39. addedge(j,k,l);addedge(k,j,l);
  40. }
  41. for(ll i=;i<=n;i++){
  42. dis[i]=M;tot[i]=;
  43. }
  44. for(ll l=,p=,nxt,mi;l<=n;l++,p=nxt){
  45. for(ll i=g[p];i;i=e[i].nxt)
  46. if(dis[p]+e[i].w<dis[e[i].to]){
  47. tot[e[i].to]=;
  48. dis[e[i].to]=dis[p]+e[i].w;
  49. }
  50. else if(dis[p]+e[i].w==dis[e[i].to])
  51. tot[e[i].to]=(tot[e[i].to]+)%K;
  52. mi=M;
  53. for(ll i=;i<=n;i++)
  54. if(dis[i]<mi&&!v[i]){
  55. mi=dis[i];nxt=i;
  56. }
  57. v[nxt]=true;
  58. }
  59. ans=;
  60. for(ll i=;i<=n;i++)
  61. ans=ans*tot[i]%K;
  62. printf("%I64d\n",ans);
  63. }
  64. int main(){
  65. freopen("treecount.in","r",stdin);
  66. freopen("treecount.out","w",stdout);
  67. init();
  68. fclose(stdin);
  69. fclose(stdout);
  70. return ;
  71. }

[日常训练]常州集训day3的更多相关文章

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

    T1 Description 给定一个长度为$n$的正整数序列$a$.可以将序列分成若干段,定义第$i$段的权值$x_i$为这一段中所有数的最大值,特殊地,$x_0=0$.求$\sum_{i=1}^{ ...

  2. [日常训练]常州集训day7

    T1 Description 给定一个序列,初始为空.依次将$1-n$插入序列,其中$i$插到当前第$a_i$个数的右边($a_i=0$表示插到序列最左边).求最终序列. Input 第一行一个整数$ ...

  3. [日常训练]常州集训day5

    T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...

  4. [日常训练]常州集训day2

    T1 Description 给定$N$个点,问这$N$个点能构成的三角形个数. Input 第一行一个整数$N$,代表点数. 接下来$N$行,每行两个非负整数$X,Y$,表示一个点的坐标. Outp ...

  5. 【LOJ6067】【2017 山东一轮集训 Day3】第三题 FFT

    [LOJ6067][2017 山东一轮集训 Day3]第三题 FFT 题目大意 给你 \(n,b,c,d,e,a_0,a_1,\ldots,a_{n-1}\),定义 \[ \begin{align} ...

  6. 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)

    [LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...

  7. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  8. 2019暑期金华集训 Day3 字符串

    自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对 ...

  9. 2019暑期金华集训 Day3 图论

    自闭集训 Day3 图论 NOI2019 D2T1 没有真正建出图来的必要,可以直接打取\(\min\)的\(tag\). 也可以把边压进堆里,然后变成一个二维清点问题(???),然后就线段树+并查集 ...

随机推荐

  1. SQL Server数据库代码指令简介

    这些是比较常用的命令操作,事先声明,这些命令是不区分大小写的,我按照我的课本来总结用法和知识点,无用的章节自动省略. 没有一点数据库知识基础的可以等我录制视频,不然可能看不懂,视频链接:http:// ...

  2. node基础05:路由基础

    1.基础实例 //server.js var http = require("http"); var url = require("url"); var rou ...

  3. Oracle Coherence应用部署到Jboss EAP 6.x 时 NoClassDefFoundError: sun/rmi/server/MarshalOutputStream 的解决办法

    今天将一个web应用从weblogic 10.3迁移到jboss EAP 6.3上,该应用使用oracle coherence做为缓存,部署上去后,启动时一直报如下错误:     at java.ut ...

  4. Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析

    前言 本文将分析mybatis与spring整合的MapperScannerConfigurer的底层原理,之前已经分析过java中实现动态,可以使用jdk自带api和cglib第三方库生成动态代理. ...

  5. 常用 redis 命令(for php)

    Redis 主要能存储 5 种数据结构,分别是 strings,hashes,lists,sets 以及 sorted sets. 新建一个 redis 数据库 $redis = new Redis( ...

  6. 前端人员一定要掌握的PS技巧

    一.PS与前端知多少 一般我们会认为PS是用来修改图片的,这些工作是美工人员做的事不是前端人员做的,其实这样想你就错了,因为在前端人员也是要学会一些简单的关于PS的技巧的,这样就不会应为一点点小小的需 ...

  7. JVM内存管理------杂谈(借此也论一论obj=null)

    各位园友好,LZ是从某网站转战过来的博主,看到这里很多博主都称看友们为园友,LZ斗胆模仿一下,不过以前,LZ其实都是称看友们为猿友的.之前LZ在某网站已经写了一系列文章,已经全部复制到了园内的新博客, ...

  8. 关于Task的线程窃取

    示例代码: static void Main(string[] args) { ThreadPool.SetMaxThreads(, ); object locker = new object(); ...

  9. VS代码管理插件AnkhSvn

    下载AnKHSvn软件,启动VS,源代码管理工具选择AnKHSvn 在视图-〉其它窗口-〉Pending Change->提交变化的更改

  10. JavaScript学习笔记-循环输出菱形,并可菱形自定义大小

    var Cen = 6;//定义菱形中部为第几行(起始值为0) //for循环输出菱形 document.write("<button onclick='xh()'>点我for循 ...