轮到罗剑桥出题了

这是什么风格,中文名称与英文名称分明对不上吗233

T1:

似乎只会做这道题23333

A....BE

........

C....DF

据题意数学变形得A-C<=B-D,B-D<=E-F,即左右的差是递增的。

A....B

.......

C....D

E....F

据题意数学变形得A-B<=C-D,C-D<=E-F,即上下的差是递增的。

那么令f1[i][j]=A[i][j]-A[i+1][j],f2[i][j]=A[i][j]-A[i][j+1]。

只有当f1[i][j-1]<=f1[i][j]且f2[i-1][j]<=f2[i][j]时 (i,j)才能进入矩形中。

那么问题就转化成最大子矩形,其内部没有坏点。

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define rep(i,s,t) for(int i=s;i<=t;i++)
  6. using namespace std;
  7. inline int read() {
  8. int x=,f=;char c=getchar();
  9. for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
  10. for(;isdigit(c);c=getchar()) x=x*+c-'';
  11. return x*f;
  12. }
  13. const int maxn=;
  14. int A[maxn][maxn],B[maxn][maxn],C[maxn][maxn],n,m,ans;
  15. int is[maxn][maxn];
  16. int right[maxn],left[maxn],up[maxn][maxn];
  17. int main() {
  18. freopen("neo.in","r",stdin);
  19. freopen("neo.out","w",stdout);
  20. n=read();m=read();
  21. rep(i,,n) rep(j,,m) A[i][j]=read();
  22. rep(i,,n) rep(j,,m) B[i][j]=A[i][j]-A[i+][j],C[i][j]=A[i][j]-A[i][j+];
  23. n--;m--;
  24. rep(i,,n) rep(j,,m) if(B[i][j]<=B[i][j+]&&C[i][j]<=C[i+][j]) is[i][j]=;
  25. rep(i,,n) {
  26. rep(j,,m) {
  27. if(!is[i][j]) continue;
  28. up[i][j]=up[i-][j]+;
  29. if(j==) left[j]=;
  30. else {
  31. left[j]=j;
  32. while(up[i][left[j]-]>=up[i][j]) left[j]=left[left[j]-];
  33. }
  34. }
  35. for(int j=m;j;j--) {
  36. if(!is[i][j]) continue;
  37. if(j==m) right[j]=m;
  38. else {
  39. right[j]=j;
  40. while(up[i][right[j]+]>=up[i][j]) right[j]=right[right[j]+];
  41. }
  42. ans=max(ans,(up[i][j]+)*(right[j]-left[j]+));
  43. }
  44. }
  45. printf("%d\n",ans);
  46. return ;
  47. }

T2:简要题意,计算从最上角上方连一条管道到最下角下方的方案书数。

显然是不可做的插头DP,写个暴搜60

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define rep(i,s,t) for(int i=s;i<=t;i++)
  6. using namespace std;
  7. inline int read() {
  8. int x=,f=;char c=getchar();
  9. for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
  10. for(;isdigit(c);c=getchar()) x=x*+c-'';
  11. return x*f;
  12. }
  13. const int maxn=;
  14. int n,m,ans;
  15. char A[maxn][maxn];
  16. int have[maxn][maxn];
  17. int mx[]={,-,,},my[]={,,,-};
  18. void dfs(int x,int y) {
  19. have[x][y]=;
  20. if(x==n&&y==m) ans++;
  21. else rep(dir,,) if(x>=&&x<=n&&y>=&&y<=m&&!have[x+mx[dir]][y+my[dir]]&&A[x+mx[dir]][y+my[dir]]=='.') dfs(x+mx[dir],y+my[dir]);
  22. have[x][y]=;
  23. }
  24. int main() {
  25. freopen("voda.in","r",stdin);
  26. freopen("voda.out","w",stdout);
  27. n=read();m=read();
  28. rep(i,,n) scanf("%s",A[i]+);
  29. if(A[][]=='#'||A[n][m]=='#') {puts("");return ;}
  30. dfs(,);printf("%d\n",ans%);
  31. return ;
  32. }

T3:有一个N层M格的书架,可以将一本书移动到另一层,也可以把同一层的书左右移动,求从初始状态到最终状态的最少移动数。

考虑那些前后所在层不变的书,应对答案贡献总数-LCS的数目,如果这层全满,需要答案额外+1(先将一本拿到别层再拿回来)。

对于前后所在层变化的书,答案要+1表示移动一次,如果所在连通分量全满,同理答案要再+1.

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define rep(i,s,t) for(int i=s;i<=t;i++)
  6. using namespace std;
  7. inline int read() {
  8. int x=,f=;char c=getchar();
  9. for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
  10. for(;isdigit(c);c=getchar()) x=x*+c-'';
  11. return x*f;
  12. }
  13. const int maxn=;
  14. int m,C[maxn],t[maxn*maxn],g[maxn];
  15. int get(int* C,int len) {
  16. int ans=;
  17. rep(i,,len) g[i]=<<;
  18. rep(i,,len) {
  19. int k=lower_bound(g+,g+len+,C[i])-g;
  20. ans=max(ans,k);g[k]=C[i];
  21. }
  22. return ans;
  23. }
  24. int n,A[maxn][maxn],B[maxn][maxn],yes[maxn],ans;
  25. int pos[maxn*maxn],pos2[maxn*maxn],first[maxn],next[maxn*maxn*],to[maxn*maxn*],e;
  26. void AddEdge(int u,int v) {
  27. ans++;
  28. to[++e]=v;next[e]=first[u];first[u]=e;
  29. to[++e]=u;next[e]=first[v];first[v]=e;
  30. }
  31. int vis[maxn],f[maxn];
  32. int dfs(int x) {
  33. if(vis[x]) return f[x];vis[x]=;
  34. int& ans=f[x];ans=!yes[x];
  35. for(int i=first[x];i;i=next[i]) ans&=dfs(to[i]);
  36. return ans;
  37. }
  38. int main() {
  39. freopen("police20.in","r",stdin);
  40. freopen("police.out","w",stdout);
  41. n=read();m=read();int ok=,dif=;
  42. rep(i,,n) rep(j,,m) {
  43. A[i][j]=read();
  44. if(!A[i][j]) ok=yes[i]=;
  45. else pos[A[i][j]]=i,pos2[A[i][j]]=j;
  46. }
  47. rep(i,,n) rep(j,,m) {
  48. B[i][j]=read();
  49. if(B[i][j]&&i!=pos[B[i][j]]) AddEdge(i,pos[B[i][j]]);
  50. }
  51. rep(i,,n) {
  52. int len=;
  53. rep(j,,m) if(B[i][j]&&pos[B[i][j]]==i) C[++len]=pos2[B[i][j]];
  54. int tmp=len-get(C,len);
  55. if(tmp) ans+=tmp+(len==m);
  56. }
  57. if(ans&&!ok) puts("-1");
  58. else {
  59. rep(i,,n) if(!vis[i]&&first[i]) ans+=dfs(i);
  60. printf("%d\n",ans);
  61. }
  62. return ;
  63. }

BJOI2015 Day2的更多相关文章

  1. 【从零开始学BPM,Day2】默认表单开发

    [课程主题]主题:5天,一起从零开始学习BPM[课程形式]1.为期5天的短任务学习2.每天观看一个视频,视频学习时间自由安排. [第二天课程] Step 1 软件下载:H3 BPM10.0全开放免费下 ...

  2. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  3. day2

    三级菜单: ))))))))))] last_levels.pop() ]]]]]]]]:] information = : ch = msvcrt.getch() ][][: : password= ...

  4. java day2一个模拟双色球的代码

    package day2; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt ...

  5. Python基础-day2

    1.Python模块python 中导入模块使用import语法格式:import module_name示例1: 导入os模块system('dir')列出当前目录下的所有文件 # _*_ codi ...

  6. 【BZOJ 4517】【SDOI 2016 Round1 Day2 T2】排列计数

    本蒟蒻第一次没看题解A的题竟然是省选$Round1$ $Day2$ $T2$ 这道组合数学题. 考试时一开始以为是莫队,后来想到自己不会组合数的一些公式,便弃疗了去做第三题,,, 做完第三题后再回来看 ...

  7. 冲刺阶段 day2

    day2 项目进展 今天本组五位同学聚在一起将项目启动,首先我们对项目进行了规划,分工,明确指出每个人负责哪些项目.由负责第一部分的组员开始编程,在已经搭建好的窗体内,对系部设置进行了编写,本校共六个 ...

  8. BZOJ 4337: BJOI2015 树的同构 树hash

    4337: BJOI2015 树的同构 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4337 Description 树是一种很常见的数 ...

  9. python_way ,day2 字符串,列表,字典,时间模块

    python_way ,day2 字符串,列表,字典,自学时间模块 1.input: 2.0 3.0 区别 2.0中 如果要要用户交互输入字符串: name=raw_input() 如果 name=i ...

随机推荐

  1. MySQL之扩展(触发器,存储过程等)

    视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SEL ...

  2. 轻松架设时时监控工具Cacti

    Cacti是一套基于PHP,MySQL,SNMP及 RRDTool开发的网络流量监测图形分析工具.通过snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂 ...

  3. Ninject学习笔记<二>

    本文转载自kuangkro 如果给您带来不便请联系博主 一.控制反转和依赖注入 Ninject是一个轻量级的基于.Net平台的依赖注入(IOC)框架.所谓的IOC,即控制反转(Inversion of ...

  4. WPF 将PPT,Word转成图片

    在Office下,PowerPoint可以直接把每张幻灯片转成图片,而Word不能直接保存图片.所以只能通过先转换成xps文件,然后再转成图片. 一.PPT 保存为图片 /// <summary ...

  5. hdu 1879 继续畅通工程 解题报告

    题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1879 这条题目我的做法与解决Constructing Roads的解法是相同的. 0 表示没有连通: ...

  6. Bootstrap分页插件:bootstrap-paginator

    今天和大家分享一个Bootstrap的分页插件:bootstrap-paginator. 插件地址: https://github.com/lyonlai/bootstrap-paginator 先看 ...

  7. HDU1850 Being a Good Boy in Spring Festival(博弈)

    Being a Good Boy in Spring Festival Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I ...

  8. CodeForces - 407A

    Triangle Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  9. 线段覆盖4(codevs 3012)

    题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...

  10. 谈Web前端安全编码

    最近开发中涉及到有关输出正确的HTML标签这样的问题,正好对字符编码这块儿多看看,之前对这个方面认识的不深,思考的确实不够,如果下次再碰见类似的问题,若再次不少时间去调研的花,就得不偿失了. 就像正则 ...