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 ...
随机推荐
- URAL1326. Bottle Taps(状压)
1326 用队列优化的 不知道为什么一直WA 传统直白的 状压 写了超时 O((1<<n)*m*n) 之后想了可以把n省去 预处理一下方案 #include <iostream&g ...
- IIS 的最大并发数
为了探寻IIS的最大并发数,先要做几个假设. 1.假设最大并发数就是当前的连接数.意思是当前能承受最大的连接,那么就表明最大的并发.2.假设IIS应用程序池处于默认状态,更改设置将会对最大连接数产生影 ...
- 利用nginx与nginx-rtmp-module搭建流媒体服务器实现直播
使用环境是centos 7.0+nginx:可以实现简单的流媒体服务. 先下载nginx-rtmp-module拓展: nginx-rtmp-module的官方github地址:https://git ...
- JVM:内存分配与回收策略
Java技术体系中所提倡的自动内存管理最终可以归结为自动化的解决了两个问题:给对象分配内存以及回收分配给对象的内存. 对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类 ...
- H5 canvas pc 端米字格 写字板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关闭 将jar或者aar发布到到mvn 中(用github作为仓库), 通过gradle dependency 方式集成
使用Android Studio开发的用户,都希望通过maven远程仓库的方式来集成jar.aar文件,但是这些文件时如何发布的呢? 通常开发者都会将jar文件发布到sonatype上,以提供给其他开 ...
- Mysql使用导出导入数据库
要在两台不同的电脑上进行开发,数据库需要统一,由于自己第一次完整的设计表结构,因此多次更改表结构,造成了很多不必要的麻烦, 需要将数据库导出成sql脚本: 命令行下具体用法如下: mysqldump ...
- 03CSS内容背景
CSS内容背景 设置背景颜色——background-color 插入背景图片——background-image 设置背景图片位置——background-position 设置重复背景图片—— ...
- Danfoss Motor - Automotive Motor: What Sensors Are There?
The Danfoss Motor states that the motor sensor control system is the heart of the entire autom ...
- TX-LCN事务控制原理
TX-LCN由两大模块组成, TxClient.TxManager,TxClient作为模块的依赖框架,提供TX-LCN的标准支持,TxManager作为分布式事务的控制方.事务发起方或者参与方都由T ...