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 ...
随机推荐
- outlook 通讯录分类--2017年1月16日--对联系人分类管理
outlook功能多,复杂,导致打开界面就晕,通讯录分类 问:在Outlook 中,随着联系人数量的增多,亲朋好友.同事.客户的信息混杂在一起,每次发邮件都要用很长时间才能从联系人列表中找到需要的人. ...
- 防止系统页面被加载进 iframe 子窗口
在controller的返回的响应头中添加 response.addHeader("x-frame-options", "DENY"); 即可
- js 宿主对象的属性和方法总结
(1)属性: //height,width; a=document.documentElement.clientHeight; //文档可视高度,由 ...
- CCF|打酱油|Java
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = ...
- VMware虚拟机下载与安装
VMware下载与安装 一.虚拟机的下载 1.进入VMware官网,点击左侧导航栏中的下载,再点击图中标记的Workstation Pro,如下图所示. 2.根据操作系统选择合适的产品,在这里以Win ...
- R Programming week 3-Debugging
Something’s Wrong! Indications that something’s not right message: A generic notification/diagnostic ...
- vscode显示php函数列表
1.安装插件支持 https://marketplace.visualstudio.com/items?itemName=linyang95.php-symbols 2.ctrt+shift+o 即可 ...
- iOS----创建静态库
静态库 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworkin ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...
- Vue全局添加组件或者模块
import Api from './api.js' export default { install (Vue) { Vue.prototype.$Api = Api } } 这种格式就可以在mai ...