http://codeforces.com/gym/100495

K题 草地的面积减去相交的面积,计算几何,垃圾题,避免不必要的计算损失精度(能约分的约分)

卡了老子一个星期了 再加前几天的一道题 这一星期真的是难受 什么都没干

AC代码

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <sstream>
  7. #include <algorithm>
  8. #include <string>
  9. #include <queue>
  10. #include <map>
  11. #include <vector>
  12. using namespace std;
  13. const int maxn = 1e3+;
  14. const int maxm = 1e4+;
  15. const int inf = 0x3f3f3f3f;
  16. const int mod = ;
  17. const double epx = 1e-;
  18. typedef long long ll;
  19. const ll INF = 1e18;
  20. const double pi = acos(-1.0);
  21. int main()
  22. {
  23. int t,kase=;
  24. double x1,y1,r1,x2,y2,r2;
  25. cin>>t;
  26. while(t--)
  27. {
  28. scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&r1,&x2,&y2,&r2);
  29. double len=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  30. double ans;
  31. if(len>=r1+r2)
  32. {
  33. ans=r1*r1*pi;
  34. }
  35. else if(fabs(r1-r2)>=len)
  36. {
  37. if(r1>r2)
  38. ans=pi*r1*r1-pi*r2*r2;
  39. else
  40. ans=;
  41. }
  42. else
  43. {
  44. double a1=acos((len*len+r1*r1-r2*r2)/(*len*r1));
  45. double a2=acos((len*len+r2*r2-r1*r1)/(*len*r2));
  46. double area1=a1*r1*r1;
  47. double area2=a2*r2*r2;
  48. double area3=len*r1*sin(a1);
  49. ans=pi*r1*r1-(area1+area2-area3);
  50. }
  51. printf("Case #%d: %.8lf\n",kase++,ans);
  52. }
  53. }
  54. close

给出被卡一万年的K的代码

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <sstream>
  7. #include <algorithm>
  8. #include <string>
  9. #include <queue>
  10. #include <map>
  11. #include <vector>
  12. using namespace std;
  13. const int maxn = 1e3+;
  14. const int maxm = 1e4+;
  15. const int inf = 0x3f3f3f3f;
  16. const int mod = ;
  17. const double epx = 1e-;
  18. typedef long long ll;
  19. const ll INF = 1e18;
  20. const double pi = acos(-1.0);
  21. int main()
  22. {
  23. int t,kase=;
  24. double x1,y1,r1,x2,y2,r2;
  25. cin>>t;
  26. while(t--)
  27. {
  28. scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&r1,&x2,&y2,&r2);
  29. double len=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  30. double ans;
  31. if(len>=r1+r2)
  32. {
  33. ans=r1*r1*pi;
  34. }
  35. else if(fabs(r1-r2)>=len)
  36. {
  37. if(r1>r2)
  38. ans=pi*r1*r1-pi*r2*r2;
  39. else
  40. ans=;
  41. }
  42. else
  43. {
  44. double a1=2.0*acos((len*len+r1*r1-r2*r2)/(*len*r1));
  45. double a2=2.0*acos((len*len+r2*r2-r1*r1)/(*len*r2));
  46. double area1=0.5*a1*r1*r1;
  47. double area2=0.5*a2*r2*r2;
  48. double area3=len*r1*sin(a1);
  49. ans=pi*r1*r1-(area1+area2-area3);
  50. }
  51. printf("Case #%d: %.11lf\n",kase++,ans);
  52. }
  53. }

B题  把每个字符串开头和结尾中间的字符排序,用map标记一下 然后在判断是否出现过就好了

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <sstream>
  7. #include <algorithm>
  8. #include <string>
  9. #include <queue>
  10. #include <map>
  11. #include <vector>
  12. using namespace std;
  13. const int maxn = 1e3+;
  14. const int maxm = 1e4+;
  15. const int inf = 0x3f3f3f3f;
  16. const int mod = ;
  17. const double epx = 1e-;
  18. typedef long long ll;
  19. const ll INF = 1e18;
  20. const double pi = acos(-1.0);
  21. string s;
  22. int ans[maxn];
  23. int main()
  24. {
  25. int n,m,t,kase=;
  26. cin>>t;
  27. while(t--)
  28. {
  29. map<string,int> mp;
  30. cin>>n>>m;
  31. for(int i=;i<n;i++)
  32. {
  33. cin>>s;
  34. int len=s.length();
  35. if(len>)
  36. sort(s.begin()+,s.end()-);
  37. //cout<<len<<" "<<s<<endl;
  38. mp[s]++;
  39. }
  40. for(int i=;i<m;i++)
  41. {
  42. cin>>s;
  43. int len=s.length();
  44. if(len>)
  45. sort(s.begin()+,s.end()-);
  46. //cout<<len<<" "<<s<<endl;
  47. if(mp[s]>)
  48. ans[i]=;
  49. else
  50. ans[i]=;
  51. }
  52. printf("Case #%d: ",kase++);
  53. for(int i=;i<m;i++)
  54. cout<<ans[i];
  55. cout<<endl;
  56. }
  57. }

E题  可以推出要求子串满足min+a>=max 的最大长度  尺取法 右端点从左端点开始推进  直到右端点不符合条件

   再从左端点开始到右端点找最值 并且不断推进左端点 直到满足条件 再向右推进

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <sstream>
  7. #include <algorithm>
  8. #include <string>
  9. #include <queue>
  10. #include <map>
  11. #include <vector>
  12. using namespace std;
  13. const int maxn = 1e5+;
  14. const int maxm = 1e4+;
  15. const int inf = 0x3f3f3f3f;
  16. const int mod = ;
  17. const double epx = 1e-;
  18. typedef long long ll;
  19. const ll INF = 1e18;
  20. int s[maxn];
  21. int main()
  22. {
  23. int t,a,n,kase=;
  24. scanf("%d",&t);
  25. while(t--)
  26. {
  27. scanf("%d %d",&n,&a);
  28. memset(s,,sizeof(s));
  29. for(int i=;i<=n;i++)
  30. scanf("%d",&s[i]);
  31. int len=;
  32. int l=,maxx,minn;
  33. maxx=minn=s[l];
  34. for(int r=;r<=n;)
  35. {
  36. if(minn+a>=maxx)
  37. {
  38. len=max(len,r-l+);
  39. r++;
  40. if(r>n)
  41. break;
  42. maxx=max(maxx,s[r]);
  43. minn=min(minn,s[r]);
  44. }
  45. else
  46. {
  47. if(s[r]==maxx)
  48. {
  49. while(minn+a<maxx)
  50. {
  51. int tempmin=s[r];
  52. for(int i=l+;i<=r;i++)
  53. tempmin=min(tempmin,s[i]);
  54. minn=tempmin;
  55. l++;
  56. }
  57. }
  58. else if(s[r]==minn)
  59. {
  60. while(minn+a<maxx)
  61. {
  62. int tempmaxx=s[r];
  63. for(int i=l+;i<=r;i++)
  64. tempmaxx=max(tempmaxx,s[i]);
  65. maxx=tempmaxx;
  66. l++;
  67. }
  68. }
  69. }
  70. //cout<<"l="<<l<<" r="<<r<<" min="<<minn<<" max="<<maxx<<endl;
  71. }
  72. printf("Case #%d: %d\n",kase++,len);
  73. }
  74. }
  75. close

D题 水题 边乘边取模

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <sstream>
  7. #include <algorithm>
  8. #include <string>
  9. #include <queue>
  10. #include <map>
  11. #include <vector>
  12. using namespace std;
  13. const int maxn = 1e6+;
  14. const int maxm = 1e4+;
  15. const int inf = 0x3f3f3f3f;
  16. const int mod = ;
  17. const double epx = 1e-;
  18. typedef long long ll;
  19. const ll INF = 1e18;
  20. ll n,m;
  21. char a[maxn];
  22. int sum[maxn];
  23. int sushu(int x)
  24. {
  25. for(int i=;i<n;i++)
  26. if(x%i==)
  27. return ;
  28. return ;
  29. }
  30. int poww(int x,int y,int z)
  31. {
  32. int ans=;
  33. for(int i=;i<=y;i++)
  34. ans=(ans*x)%n;
  35. return ans;
  36. }
  37. int main()
  38. {
  39. int t;
  40. cin>>t;
  41. int kase=;
  42. while(t--)
  43. {
  44. cin>>n;
  45. if(n==)
  46. printf("Case #%d: %d\n",kase,n);
  47. else if(sushu(n))
  48. {
  49. printf("Case #%d: %d\n",kase,poww(,n-,n)%n);
  50. }
  51. else
  52. printf("Case #%d: %d\n",kase,poww(n-,,n)%n);
  53. kase++;
  54. }
  55. }
  56. close

F题  一遍dfs回溯,记录最大深度就好了

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <iostream>
  6. #include <sstream>
  7. #include <algorithm>
  8. #include <string>
  9. #include <queue>
  10. #include <map>
  11. #include <vector>
  12. using namespace std;
  13. const int maxn = 1e3+;
  14. const int maxm = 1e4+;
  15. const int inf = 0x3f3f3f3f;
  16. const int mod = ;
  17. const double epx = 1e-;
  18. typedef long long ll;
  19. const ll INF = 1e18;
  20. char a[maxn][maxn];
  21. int visit[maxn][maxn];
  22. int n,m,k;
  23. int sum,flag;
  24. int dire[][]= {{,},{-,},{,-},{,}};
  25. void dfs(int x,int y)
  26. {
  27. visit[x][y]=;
  28. for(int i=; i<; i++)
  29. {
  30. int x1=(x+dire[i][]+n)%n;
  31. int y1=(y+dire[i][]+m)%m;
  32. //printf("x=%d y=%d x1=%d y1=%d sum=%d c=%c\n",x,y,x1,y1,sum,a[x1][y1]);
  33. if(visit[x1][y1]==&&a[x1][y1]!='#'&&a[x1][y1]!='x')
  34. {
  35. if(a[x1][y1]=='o')
  36. {
  37. dfs(x1,y1);
  38. visit[x1][y1]=;
  39. }
  40. else if(a[x1][y1]=='.')
  41. {
  42. sum++;
  43. if(sum>=k)
  44. flag=;
  45. dfs(x1,y1);
  46. visit[x1][y1]=;
  47. sum--;
  48. }
  49. }
  50. }
  51. }
  52. int main()
  53. {
  54. int t,kase=;
  55. cin>>t;
  56. while(t--)
  57. {
  58. cin>>n>>m>>k;
  59. for(int i=; i<n; i++)
  60. cin>>a[i];
  61. int x,y;
  62. for(int i=; i<n; i++)
  63. for(int j=; j<m; j++)
  64. if(a[i][j]=='x')
  65. x=i,y=j;
  66. // cout<<x<<" "<<y<<endl;
  67. // for(int i=0;i<4;i++)
  68. // cout<<dire[i][0]<<" "<<dire[i][1]<<endl;
  69. memset(visit,,sizeof(visit));
  70. flag=;sum=;dfs(x,y);
  71. // for(int i=0;i<n;i++)
  72. // {
  73. // for(int j=0;j<m;j++)
  74. // {
  75. // cout<<visit[i][j]<<" ";
  76. // }
  77. // cout<<endl;
  78. // }
  79. if(flag==)
  80. printf("Case #%d: Fits perfectly!\n",kase++);
  81. else
  82. printf("Case #%d: Oh no, snake's too fat!\n",kase++);
  83. }
  84. }

Codeforces Gym100495 B、D、E、F、K的更多相关文章

  1. Java中float、double、long类型变量赋值添加f、d、L尾缀问题

    展开1. 添加尾缀说明 我们知道Java在变量赋值的时候,其中float.double.long数据类型变量,需要在赋值直接量后面分别添加f或F.d或D.l或L尾缀来说明.  其中,long类型最好以 ...

  2. 10.4 android输入系统_框架、编写一个万能模拟输入驱动程序、reader/dispatcher线程启动过程源码分析

    1. 输入系统框架 android输入系统官方文档 // 需FQhttp://source.android.com/devices/input/index.html <深入理解Android 卷 ...

  3. HDU 5544 Ba Gua Zhen ( 2015 CCPC 南阳 C、DFS+时间戳搜独立回路、线性基 )

    题目链接 题意 : 给出一副简单图.要你找出一个回路.使得其路径上边权的异或和最大 分析 : 类似的题有 BZOJ 2115 对于这种异或最长路的题目(走过的边可以重复走) 答案必定是由一条简单路径( ...

  4. CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  5. C#、JAVA操作Hadoop(HDFS、Map/Reduce)真实过程概述。组件、源码下载。无法解决:Response status code does not indicate success: 500。

    一.Hadoop环境配置概述 三台虚拟机,操作系统为:Ubuntu 16.04. Hadoop版本:2.7.2 NameNode:192.168.72.132 DataNode:192.168.72. ...

  6. 教你一招:解决win10/win8.1系统在安装、卸载软件时出现2502、2503错误代码的问题

    经常遇到win10/win8.1系统在安装.卸载软件时出现2502.2503错误代码的问题. 解决办法: 1.打开任务管理器后,切换到“详细信息”选项卡,找到explore.exe这个进程,然后结束进 ...

  7. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  8. 兼容8事件绑定与解绑addEventListener、removeEventListener和ie的attachEvent、detachEvent

    兼容8事件绑定与解绑addEventListener.removeEventListener和ie的attachEvent.detachEvent   ;(function(){ // 事件绑定 bi ...

  9. TFS API:三、TFS WorkItem添加和修改、保存

    TFS API:三.TFS  WorkItem添加和修改.保存 WorkItemStore:表示跟踪与运行 Team Foundation Server的服务器的工作项客户端连接. A.添加工作项 1 ...

  10. C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

    类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...

随机推荐

  1. android开发学习 ------- 弹出框

    这是一种方法,是我觉得简单易懂代码量较少的一种: /* 创建AlertDialog对象并显示 */ final AlertDialog alertDialog = new AlertDialog.Bu ...

  2. struts 2.5 There is no Action mapped for namespace [/] and action name [user_find] associated with context path [/struts2_crm].

    遇到了这个错误. There is no Action mapped for namespace [/] and action name [user_find] associated with con ...

  3. Spark学习之Spark调优与调试(7)

    Spark学习之Spark调优与调试(7) 1. 对Spark进行调优与调试通常需要修改Spark应用运行时配置的选项. 当创建一个SparkContext时就会创建一个SparkConf实例. 2. ...

  4. Android 使用EventBus进行Fragment和Activity通信

    本文介绍EventBus的基本使用,以及用于Fragment和Activity之间通信. github地址: https://github.com/greenrobot/EventBus 版本是 Ev ...

  5. windows echo命令

    ECHO命令是大家都熟悉的DOS批处理命令的一条子命令,但它的一些功能和用法也许你并不是全都知道,不信你瞧:  1. 作为控制批处理命令在执行时是否显示命令行自身的开关 格式:ECHO [ON|OFF ...

  6. KMS

    slmgr -ipk 73KQT-CD9G6-K7TQG-66MRP-CQ22C

  7. IMX6核心板系列解决方案-工业级|商业级|四核|双核|Plus核心板

    i.MX 6Quad四核商业级和工业级系列的应用处理器将可扩展平台与广泛的集成和高能效处理功能相结合,尤其适合多媒体应用.i.MX6 Quad处理器的特性包括: 满足操作系统和游戏的MIPS需求,增强 ...

  8. 迅为4412嵌入式安卓开发板兼容3G网络|4G网络

    iTOP-Exynos4412开发板内置有无线 WIFI 模块.Bluetooth.GPS.Camera.3G等模组,陀螺仪等,支持 HDMI1.4(1080P/60Hz)显示,客户可以直接从开发平台 ...

  9. cf536c——思路题

    题目 题目:Lunar New Year and Number Division 题目大意:给定一个数字序列,可以任意分组(可调整顺序),但每组至少两个,求每组内数字和的平方的最小值 思路 首先,易证 ...

  10. windows sdk编程禁止窗体最大化最小化

    #include <windows.h> /*消息处理函数声明*/ HRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM ...