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 ...
随机推荐
- joda日期格式转换
public static String parseDateTime(String date,String formatFrom,String formatTo){ DateTimeFormatter ...
- AJPFX解析关于编码ansi、GB2312、unicode与utf-8的区别
大家平时遇到乱码问题是否有自己的一套解决方案?这篇文章就是介绍一下常用的编码方式关于编码ansi.GB2312.unicode与utf-8的区别 先做一个小小的试验: 在一个文件夹里,把一个txt文本 ...
- nvm安装nodejs
1. 安装nvm 下载 nvm-windows解压缩 nvm-windows解压缩 nvm-setup双击运行 nvm-setup.exe选择next选择 [D:\dev][path1] 或 默认路径 ...
- JS filters-table简单过滤-Version 1
初级版本: 输入框可检索,空格检索忽略 radio点击后会过滤 最后的两个输入框可根据age范围检索过滤 三个单独的功能,不能协同工作 <!DOCTYPE html> <html&g ...
- 微信小程序组件解读和分析:七、button按钮
button按钮组件说明: button,顾名思义,按钮,类似于html的button标签.我们可以设置按钮的属性,比如字体颜色大小,背景颜色等,可以给按钮绑定事件,用户点击时会触发事件. butto ...
- Android SDK镜像更新网速慢的解决问题
通过更换代理解决 Android SDK 在线更新镜像服务器资源:大连东软信息学院镜像服务器地址:http://mirrors.neusoft.edu.cn 端口:80北京化工大学镜像服务器地址:IP ...
- Mybatis 分页插件 PageHelper
话不多说,直接导入.部署流程. 1. 引入插件依赖包: maven工程中,pom.xml文件下,添加插件配置项: 2. 配置插件拦截器: webapp -> WEB-INF 下添加 .xml配置 ...
- CSS——BFC
http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 元素若不是bfc,那么内部浮动元素的高度不参与计算 元素若不是bf ...
- jq 中.html(),.text()和.val()的总结
html与.text的方法操作是一样,只是在具体针对处理对象不同 html处理的是元素内容,.text处理的是文本内容 html只能使用在HTML文档中,.text 在XML 和 HTML 文档中都能 ...
- laravel学习:模块化caffeinated
# Modules Extract and modularize your code for maintainability. Essentially creates "mini-larav ...