Codeforces Gym100495 B、D、E、F、K
http://codeforces.com/gym/100495
K题 草地的面积减去相交的面积,计算几何,垃圾题,避免不必要的计算损失精度(能约分的约分)
卡了老子一个星期了 再加前几天的一道题 这一星期真的是难受 什么都没干
AC代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = 1e3+;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const int mod = ;
const double epx = 1e-;
typedef long long ll;
const ll INF = 1e18;
const double pi = acos(-1.0);
int main()
{
int t,kase=;
double x1,y1,r1,x2,y2,r2;
cin>>t;
while(t--)
{
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&r1,&x2,&y2,&r2);
double len=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double ans;
if(len>=r1+r2)
{
ans=r1*r1*pi;
}
else if(fabs(r1-r2)>=len)
{
if(r1>r2)
ans=pi*r1*r1-pi*r2*r2;
else
ans=;
}
else
{
double a1=acos((len*len+r1*r1-r2*r2)/(*len*r1));
double a2=acos((len*len+r2*r2-r1*r1)/(*len*r2));
double area1=a1*r1*r1;
double area2=a2*r2*r2;
double area3=len*r1*sin(a1);
ans=pi*r1*r1-(area1+area2-area3);
}
printf("Case #%d: %.8lf\n",kase++,ans);
}
}
close
给出被卡一万年的K的代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = 1e3+;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const int mod = ;
const double epx = 1e-;
typedef long long ll;
const ll INF = 1e18;
const double pi = acos(-1.0);
int main()
{
int t,kase=;
double x1,y1,r1,x2,y2,r2;
cin>>t;
while(t--)
{
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&r1,&x2,&y2,&r2);
double len=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
double ans;
if(len>=r1+r2)
{
ans=r1*r1*pi;
}
else if(fabs(r1-r2)>=len)
{
if(r1>r2)
ans=pi*r1*r1-pi*r2*r2;
else
ans=;
}
else
{
double a1=2.0*acos((len*len+r1*r1-r2*r2)/(*len*r1));
double a2=2.0*acos((len*len+r2*r2-r1*r1)/(*len*r2));
double area1=0.5*a1*r1*r1;
double area2=0.5*a2*r2*r2;
double area3=len*r1*sin(a1);
ans=pi*r1*r1-(area1+area2-area3);
}
printf("Case #%d: %.11lf\n",kase++,ans);
}
}
B题 把每个字符串开头和结尾中间的字符排序,用map标记一下 然后在判断是否出现过就好了
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = 1e3+;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const int mod = ;
const double epx = 1e-;
typedef long long ll;
const ll INF = 1e18;
const double pi = acos(-1.0);
string s;
int ans[maxn];
int main()
{
int n,m,t,kase=;
cin>>t;
while(t--)
{
map<string,int> mp;
cin>>n>>m;
for(int i=;i<n;i++)
{
cin>>s;
int len=s.length();
if(len>)
sort(s.begin()+,s.end()-);
//cout<<len<<" "<<s<<endl;
mp[s]++;
}
for(int i=;i<m;i++)
{
cin>>s;
int len=s.length();
if(len>)
sort(s.begin()+,s.end()-);
//cout<<len<<" "<<s<<endl;
if(mp[s]>)
ans[i]=;
else
ans[i]=;
}
printf("Case #%d: ",kase++);
for(int i=;i<m;i++)
cout<<ans[i];
cout<<endl;
}
}
E题 可以推出要求子串满足min+a>=max 的最大长度 尺取法 右端点从左端点开始推进 直到右端点不符合条件
再从左端点开始到右端点找最值 并且不断推进左端点 直到满足条件 再向右推进
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = 1e5+;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const int mod = ;
const double epx = 1e-;
typedef long long ll;
const ll INF = 1e18;
int s[maxn];
int main()
{
int t,a,n,kase=;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&a);
memset(s,,sizeof(s));
for(int i=;i<=n;i++)
scanf("%d",&s[i]);
int len=;
int l=,maxx,minn;
maxx=minn=s[l];
for(int r=;r<=n;)
{
if(minn+a>=maxx)
{
len=max(len,r-l+);
r++;
if(r>n)
break;
maxx=max(maxx,s[r]);
minn=min(minn,s[r]);
}
else
{
if(s[r]==maxx)
{
while(minn+a<maxx)
{
int tempmin=s[r];
for(int i=l+;i<=r;i++)
tempmin=min(tempmin,s[i]);
minn=tempmin;
l++;
}
}
else if(s[r]==minn)
{
while(minn+a<maxx)
{
int tempmaxx=s[r];
for(int i=l+;i<=r;i++)
tempmaxx=max(tempmaxx,s[i]);
maxx=tempmaxx;
l++;
}
}
}
//cout<<"l="<<l<<" r="<<r<<" min="<<minn<<" max="<<maxx<<endl;
}
printf("Case #%d: %d\n",kase++,len);
}
}
close
D题 水题 边乘边取模
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = 1e6+;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const int mod = ;
const double epx = 1e-;
typedef long long ll;
const ll INF = 1e18;
ll n,m;
char a[maxn];
int sum[maxn];
int sushu(int x)
{
for(int i=;i<n;i++)
if(x%i==)
return ;
return ;
}
int poww(int x,int y,int z)
{
int ans=;
for(int i=;i<=y;i++)
ans=(ans*x)%n;
return ans;
}
int main()
{
int t;
cin>>t;
int kase=;
while(t--)
{
cin>>n;
if(n==)
printf("Case #%d: %d\n",kase,n);
else if(sushu(n))
{
printf("Case #%d: %d\n",kase,poww(,n-,n)%n);
}
else
printf("Case #%d: %d\n",kase,poww(n-,,n)%n);
kase++;
}
}
close
F题 一遍dfs回溯,记录最大深度就好了
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn = 1e3+;
const int maxm = 1e4+;
const int inf = 0x3f3f3f3f;
const int mod = ;
const double epx = 1e-;
typedef long long ll;
const ll INF = 1e18;
char a[maxn][maxn];
int visit[maxn][maxn];
int n,m,k;
int sum,flag;
int dire[][]= {{,},{-,},{,-},{,}};
void dfs(int x,int y)
{
visit[x][y]=;
for(int i=; i<; i++)
{
int x1=(x+dire[i][]+n)%n;
int y1=(y+dire[i][]+m)%m;
//printf("x=%d y=%d x1=%d y1=%d sum=%d c=%c\n",x,y,x1,y1,sum,a[x1][y1]);
if(visit[x1][y1]==&&a[x1][y1]!='#'&&a[x1][y1]!='x')
{
if(a[x1][y1]=='o')
{
dfs(x1,y1);
visit[x1][y1]=;
}
else if(a[x1][y1]=='.')
{
sum++;
if(sum>=k)
flag=;
dfs(x1,y1);
visit[x1][y1]=;
sum--;
}
}
}
}
int main()
{
int t,kase=;
cin>>t;
while(t--)
{
cin>>n>>m>>k;
for(int i=; i<n; i++)
cin>>a[i];
int x,y;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
if(a[i][j]=='x')
x=i,y=j;
// cout<<x<<" "<<y<<endl;
// for(int i=0;i<4;i++)
// cout<<dire[i][0]<<" "<<dire[i][1]<<endl;
memset(visit,,sizeof(visit));
flag=;sum=;dfs(x,y);
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<m;j++)
// {
// cout<<visit[i][j]<<" ";
// }
// cout<<endl;
// }
if(flag==)
printf("Case #%d: Fits perfectly!\n",kase++);
else
printf("Case #%d: Oh no, snake's too fat!\n",kase++);
}
}
Codeforces Gym100495 B、D、E、F、K的更多相关文章
- Java中float、double、long类型变量赋值添加f、d、L尾缀问题
展开1. 添加尾缀说明 我们知道Java在变量赋值的时候,其中float.double.long数据类型变量,需要在赋值直接量后面分别添加f或F.d或D.l或L尾缀来说明. 其中,long类型最好以 ...
- 10.4 android输入系统_框架、编写一个万能模拟输入驱动程序、reader/dispatcher线程启动过程源码分析
1. 输入系统框架 android输入系统官方文档 // 需FQhttp://source.android.com/devices/input/index.html <深入理解Android 卷 ...
- HDU 5544 Ba Gua Zhen ( 2015 CCPC 南阳 C、DFS+时间戳搜独立回路、线性基 )
题目链接 题意 : 给出一副简单图.要你找出一个回路.使得其路径上边权的异或和最大 分析 : 类似的题有 BZOJ 2115 对于这种异或最长路的题目(走过的边可以重复走) 答案必定是由一条简单路径( ...
- CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset
一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...
- 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. ...
- 教你一招:解决win10/win8.1系统在安装、卸载软件时出现2502、2503错误代码的问题
经常遇到win10/win8.1系统在安装.卸载软件时出现2502.2503错误代码的问题. 解决办法: 1.打开任务管理器后,切换到“详细信息”选项卡,找到explore.exe这个进程,然后结束进 ...
- Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、
特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣) ...
- 兼容8事件绑定与解绑addEventListener、removeEventListener和ie的attachEvent、detachEvent
兼容8事件绑定与解绑addEventListener.removeEventListener和ie的attachEvent.detachEvent ;(function(){ // 事件绑定 bi ...
- TFS API:三、TFS WorkItem添加和修改、保存
TFS API:三.TFS WorkItem添加和修改.保存 WorkItemStore:表示跟踪与运行 Team Foundation Server的服务器的工作项客户端连接. A.添加工作项 1 ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
随机推荐
- jquery js 分页
<html xmlns="http://www.w3.org/1999/xhtml"><head> <title>jQuery.pager ...
- 简洁大方的wordpress主题,不容错过的主题,附带主题源码下载
cu主题是由疯狂的大叔设计,界面简洁大方是它最大的特点之一. 手残君也比较喜爱这款主题,在使用的过程中,根据手残君的个人习惯,对其进行了优化. 标题优化 标题居中显示 增加标题div背景色 标题div ...
- Android开发中查看未root真机的app数据库
在Android开发中,如果用到数据库来储存数据,那么难免就要查看数据库中的内容,可是对于未root的真机来说,查看数据库就不是那么容易了,如果仅仅为了查看数据库再把手机root了,有点得不偿失,所以 ...
- webpack2版本四个核心概念
webpack 是一个现代的 JavaScript 应用程序的模块打包器(module bundler) 四个核心概念: --------------------------------------- ...
- 【转】MFC 自定义edit 限制输入十六进制内容 响应复制粘贴全选剪切的功能
参考地址:MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能 Ctrl组合键ASCII码 ^Z代表Ctrl+z ASCII值 控制字符 AS ...
- 17Web服务器端控件
Web服务器端控件 Web服务器端控件 ASP.Net提供了两类服务器端控件:Html服务器端控件和Web服务器端控件.由于Web服务器端控件功能更强大,和Windows应用程序的控件使用方法类似,容 ...
- java上传文件大小转换(字节转kb/mb/gb)
/** * 字节转kb/mb/gb * @param size * @return */ public String getPrintSize(long size) { //如果字节数少于1024,则 ...
- [Python3网络爬虫开发实战] 1.5.2-PyMongo的安装
在Python中,如果想要和MongoDB进行交互,就需要借助于PyMongo库,这里就来了解一下它的安装方法. 1. 相关链接 GitHub:https://github.com/mongodb/m ...
- YOLOv3测试命令
一.老规矩 在darknet\build\darknet\x6下按住shift键,点击鼠标右键选择“在此处打开Powershell 窗口(s)” 二.测试图片命令: .\darknet detect ...
- SQL-如何使用 MongoDB和PyMongo。
先决条件 在开始之前,请确保已经安装了 PyMongo 发行版. 在 Python shell 中,下面的代码应该在不引发异常的情况下运行: >>> import pymongo 假 ...