=-=感觉今天的题目好难...

主要是没有碰到过,所以会觉得不懂怎么写..

其实现在想想,T1,T2,T3其实都好水..T1其实没有做过还真不会,有做过的话就是个大水题了

T2找最小环..超级裸的,但是自己不会打=-=

T3直接FLOYD...+判断障碍物是否有在同一条线上

今天按理来说只有T4会比较难一些..DP+贪心

T1:模拟+数学思想

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. int d,n,m,k,t;
  6. int minx=123456,miny=123456,sum=123456;
  7. int ansx[10001],ansy[10001],tot[1001][1001],a[100001],b[100001];
  8. int main(){
  9. freopen("manhattan.in","r",stdin);
  10. freopen("manhattan.out","w",stdout);
  11. scanf("%d%d",&d,&n);
  12. for(int i=1;i<=n;i++){
  13. scanf("%d%d",&a[i],&b[i]);
  14. if(a[i]<minx) minx=a[i];
  15. if(b[i]<miny) miny=b[i];
  16. }
  17. for(int i=1;i<=n;i++){
  18. t=(a[i]-minx)%d+1;//这一段是关键
  19. k=(b[i]-miny)%d+1;//就是%d看看是否要拆除
  20. ansx[t]++;//记录个数
  21. ansy[k]++;
  22. tot[t][k]++;
  23. }
  24. for(int i=1;i<=d;i++)
  25. for(int j=1;j<=d;j++){//横坐标上要拆的个数+纵坐标上的-重复算的
  26. if(ansx[i]+ansy[j]-tot[i][j]<sum) sum=ansx[i]+ansy[j]-tot[i][j];
  27. }
  28. printf("%d",sum);
  29. return 0;
  30. }

T2:裸的最小环

网上的模板代码简直在逗我..坑死我了

后面翻了翻书,发现代码很简单明了的..

主要的部分是

  1. for (int k=1; k<=n; ++k)
  2. {
  3. for (int i=1; i<k; ++i)
  4. for (int j=i+1; j<k; ++j)
  5. ans=Min(ans,f[i][j]+g[j][k]+g[k][i]);//个人感觉是在找环吧
  6. for (int i=1; i<=n; ++i)
  7. for (int j=1; j<=n; ++j)
  8. if ((i!=j)&&(j!=k)&&(i!=k))
  9. f[i][j]=Min(f[i][k]+f[k][j],f[i][j]);//FLOYD求最短路
  10. }

自己略理解了一下..或许也不是特别正确吧

有时间好好的刷几题试试看好了

附上代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. using namespace std;
  7.  
  8. int g[1001][1001],f[1001][1001];
  9.  
  10. int Min(int a,int b) { return a<b?a:b; }
  11.  
  12. int main ()
  13. {
  14. freopen("heart.in","r",stdin);
  15. freopen("heart.out","w",stdout);
  16. int n,m;
  17. memset(g,27,sizeof(g));
  18. memset(f,27,sizeof(f));
  19. scanf("%d%d",&n,&m);
  20. for (int i=1; i<=m; ++i)
  21. {
  22. int x,y;
  23. scanf("%d%d",&x,&y);
  24. scanf("%d",&g[x][y]);
  25. g[y][x]=g[x][y];
  26. f[x][y]=f[y][x]=g[x][y];
  27. }
  28. int ans=21474836;
  29. for (int k=1; k<=n; ++k)
  30. {
  31. for (int i=1; i<k; ++i)
  32. for (int j=i+1; j<k; ++j)
  33. ans=Min(ans,f[i][j]+g[j][k]+g[k][i]);
  34. for (int i=1; i<=n; ++i)
  35. for (int j=1; j<=n; ++j)
  36. if ((i!=j)&&(j!=k)&&(i!=k))
  37. f[i][j]=Min(f[i][k]+f[k][j],f[i][j]);
  38. }
  39. if (ans==21474836)
  40. printf("He will never come back.");
  41. else printf("%d",ans);
  42. fclose(stdin); fclose(stdout);
  43. }

T3:floyd求最短路问题

其实这一题我看题的第一时间有想到求最短路问题,但是一想到要判断是否有障碍物这个细节,就各种不想打

=-=这应该算是我之前的一种烦躁的病吧...一定要改过来啊..

其实我要是真打起来的话,极有可能用DIJK..什么算法求最短路,上面的那个细节也不一定处理得正确->或许当时就是这么想的嗯!

看了别人的程序之后发现这里的细节处理非常简单:

  1. for(int i=1;i<=m;i++){
  2. scanf("%d%d",&x2,&y2);
  3. for(int j=0;j<=n;j++)
  4. for(int k=0;k<j;k++){
  5. double a,b,c,d;
  6. a=abs(x[j]-x[k]);
  7. b=abs(y[j]-y[k]);
  8. c=abs(x[j]-x2);
  9. d=abs(y[j]-y2);
  10. if((b/a==d/c) && Max(x[j],x[k])>=x2 && Min(x[j],x[k])<=x2 && Max(y[j],y[k])>=y2 && Min(y[j],y[k])<=y2)
  11. dis[j][k]=dis[k][j]=INF;
  12. }
  13. }

在判断完斜率是否相等之后,看看那个障碍物是否在两个端点之间即可..

感觉这个方法很常用到..MARK一下..

附上完整代码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. const int INF=123456789;
  7. int x0,y0,n,m,x2,y2;
  8. double dis[1001][1001];
  9. int x[10001],y[10001];
  10. int Min(int a,int b)
  11. {
  12. return a<b?a:b;
  13. }
  14. int Max(int a,int b)
  15. {
  16. return a<b?b:a;
  17. }
  18. int main(){
  19. freopen("brazil.in","r",stdin);
  20. freopen("brazil.out","w",stdout);
  21. memset(dis,63,sizeof(dis));
  22. scanf("%d%d%d%d",&x0,&y0,&n,&m);
  23. for(int i=1;i<=n;i++){
  24. scanf("%d%d",&x[i],&y[i]);
  25. dis[i][0]=sqrt((x[i]-x0)*(x[i]-x0)+(y[i]-y0)*(y[i]-y0))*2;
  26. for(int j=1;j<i;j++)
  27. dis[i][j]=dis[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
  28. }
  29. for(int i=1;i<=m;i++){
  30. scanf("%d%d",&x2,&y2);
  31. for(int j=0;j<=n;j++)
  32. for(int k=0;k<j;k++){
  33. double a,b,c,d;
  34. a=abs(x[j]-x[k]);
  35. b=abs(y[j]-y[k]);
  36. c=abs(x[j]-x2);
  37. d=abs(y[j]-y2);
  38. if((b/a==d/c) && Max(x[j],x[k])>=x2 && Min(x[j],x[k])<=x2 && Max(y[j],y[k])>=y2 && Min(y[j],y[k])<=y2)
  39. dis[j][k]=dis[k][j]=INF;
  40. }
  41. }
  42. for(int k=2;k<=n;k++)
  43. for(int i=1;i<=n;i++)
  44. for(int j=0;j<=n;j++){
  45. if(i!=j && j!=k && i!=k)
  46. dis[i][j]=Min(dis[i][j],dis[i][k]+dis[k][j]);
  47. }
  48. printf("%.0lf",dis[1][0]);
  49. return 0;
  50.  
  51. }

顺便提一下floyd的一个小地方..

我不懂为什么一直会忘记掉dis[i][j]记录的是第i个点到第j个点的距离=-=

不要有一天傻逼打错了嗯

T4:DP+贪心

=-=不知道这样的T4自己什么时候才能改完!

HPY都改完了!你居然连那个妹纸都不如!你就是个傻逼傻逼傻逼..

D11的更多相关文章

  1. D11——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D11 20180908内容纲要: 1.RabbitMQ消息队列 (1)RabbitMQ安装 (2)Rabbits示例 模式一:fanout 模式二:direct ...

  2. 预科班D11

    2020.09.21星期一 预科班D11 学习内容: 一.基本数据类型及内置方法 1.整形int及浮点型float + - * / // ** % > < >= <= 2.字符 ...

  3. 正式班D11

    2020.10.20星期二 正式班D11 bash解释器交互式环境特性 命令和文件自动补全(Tab只能补全命令和文件) 快捷键 CTRL+C ==>终止前台运行的程序 CTRL+D ==> ...

  4. 暑假集训D11总结

    %dalao 今天某学长来讲一个极其高深的数据结构——线段树(woc哪里高深了),然而并没有时间整理笔记= =,所以明天在扔笔记咯= = 考试 今天考试,一看数据范围,woc暴力分给的真足,然后高高兴 ...

  5. D11 列表 list 元祖 字典dict

    取值 name = "alexdfg" print(name[3:5]) 取出 ex name = "alexdfg" print(name[3]) 取出e 列 ...

  6. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  7. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  8. PHP执行文档操作

    1.POWINTPOINT系列 之前参与过一个商城的项目,里面有将excel 导出的功能,但是如果要弄成PPT的我们应该怎么办呢?PHP是属于服务器端的 总不能在里面装个Powintpoint吧.于是 ...

  9. CSS-学习笔记三

    绝对定位:1. 脱离了文档流,没有浮动效果2. 默认情况下,设置了绝对定位的块,它的Top,left是相对于浏览器的3. 当给设置了绝对定位的块的父元素设置定位的时候(绝对.相对.固定),    那么 ...

随机推荐

  1. 网络资源(7) - JAX-WS视频

    2014_08_25 http://v.youku.com/v_show/id_XNjMzNDcyMTk2.html 基于JAX-WS编程模型的WebService 1. @WebService注释类 ...

  2. English is very important!

    Well, as a college student,I haven't realized how important the English is . But as a web programmer ...

  3. android ndk通过遍历和删除文件

           在做移动开发过程,难免有些本地文件管理操作.例如,很常见app随着微博.微信要清除缓存功能,此功能是走app文件夹.然后删除所有缓存文件.使用java的File类能够实现本地文件遍历及删 ...

  4. 隐藏Console形式无效(继续1)

    [2014/10/19  23:57 ] :由port主机遥控. 该程序的执行后,计划自己主动开放之机999port,其他计算机将能够通过999port机器的操作. 程序中使用的到的命令: telne ...

  5. poj 1068 Parencodings 模拟

    进入每个' )  '多少前' (  ', 我们力求在每' ) '多少前' )  ', 我的方法是最原始的图还原出来,去寻找')'. 用. . #include<stdio.h> #incl ...

  6. php exit、return、break、continue之间的差别,具体介绍

    相信大家在php开发中有几个经常使用的停止程序和循环的keyword的误区( exit.return.break.continue) exit 退出全部脚本,是个函数 return 语言结构的使用方法 ...

  7. MVC验证08-jQuery异步验证

    原文:MVC验证08-jQuery异步验证 本文主要体验通过jQuery异步验证. 在很多的教材和案例中,MVC验证都是通过提交表单进行的.通过提交表单,可以很容易获得验证出错信息.因为,无论是客户端 ...

  8. HTML5实现涂鸦板

    原文:HTML5实现涂鸦板 最近闲的,看了看html5,强大的绘图功能让我惊奇,于是,写了个小玩意---涂鸦板,能实现功能有:画画,改色,调整画笔大小 html5的绘图可以分为点,线,面,圆,图片等, ...

  9. 请确保在编译时已将“AjaxControlToolkit.Properties.Resources.NET4.resources”正确嵌入或链接到程序集“AjaxControlToolkit”

    原文:请确保在编译时已将"AjaxControlToolkit.Properties.Resources.NET4.resources"正确嵌入或链接到程序集"AjaxC ...

  10. linux 下一个 jira-6.3.6 组态 皴 翻译 迁移数据库

    每一个版本号翻译包下载  https://translations.atlassian.com/dashboard/download jira下载地址  https://www.atlassian.c ...