题解 Walker
总觉得有个柿子可以推……然而没推出来
考试的时候有个柿子假了导致我没想用两个点可以解出一组参数的事
假掉的柿子告诉我有不少东西能消掉
然而实际上随便选两个点高斯消元解出一组参数,再代入验证看够不够一半就行
因为至少有一半点是对的,1s内求不出解的概率极低
至于弧度值的正负:想想弧度的定义吧我半天没想明白它是啥
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 100010
#define ll long long
//#define int long long
int n;
const double eps=1e-6;
namespace task1{
struct ele{
double x, y, m, n, d1, d2;
inline void build(double a1, double a2, double a3, double a4, double a5, double a6) {
x=a1, y=a2, m=a3, n=a4, d1=a5, d2=a6;
}
}e[N<<1];
inline bool operator < (ele a, ele b) {return fabs(a.d1-b.d1)<eps?a.d2<b.d2:a.d1<b.d1;}
void solve() {
scanf("%d", &n);
double a, b, c, d;
for (int i=1; i<=n; ++i) {
scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
e[i].build(a, b, c, d, c-a, d-b);
}
sort(e+1, e+n+1);
//for (int i=1; i<=n; ++i) cout<<e[i].d1<<' '<<e[i].d2<<endl;
int pos1=1, pos2=1;
for (int i=1; i<=n; ++i,++pos1,++pos2) {
while (pos2+1<=n && fabs(e[pos2+1].d1-e[pos1].d1)<eps && fabs(e[pos2+1].d2-e[pos1].d2)<eps) ++pos2;
if (pos2-pos1+1>=(n+1)/2) {
printf("%.10lf\n", 0.0);
printf("%.10lf\n", 1.0);
printf("%.10lf %.10lf\n", e[pos1].d1, e[pos2].d2);
exit(0);
}
pos1=pos2;
}
}
}
namespace task{
double x[N], y[N], u[N], v[N], ans[N];
struct matrix{
double a[10][10];
int n, m;
void clear() {memset(a, 0, sizeof(a));}
void resize(int a, int b) {n=a; m=b;}
void put() {for (int i=1; i<=n; ++i) {for (int j=1; j<=m; ++j) cout<<a[i][j]<<' '; cout<<endl;}}
void set(int i, double x1, double x2, double x3, double x4, double x5) {a[i][1]=x1; a[i][2]=x2; a[i][3]=x3; a[i][4]=x4; a[i][5]=x5;}
void gauss(double ans[]) {
for (int i=1; i<=n; ++i) {
int r=i;
for (int j=i+1; j<=n; ++j) if (fabs(a[j][i])>fabs(a[r][i])) r=j;
if (r!=i) swap(a[i], a[r]);
for (int j=1; j<=n; ++j) {
if (i==j) continue;
double d=a[j][i]/a[i][i];
for (int k=i; k<=m; ++k) a[j][k]-=a[i][k]*d;
}
}
for (int i=1; i<=n; ++i) ans[i]=a[i][m]/a[i][i];
}
}mat;
void check(double x1, double y1, double m1, double n1, double x2, double y2, double m2, double n2) {
mat.clear();
mat.set(1, x1, -y1, 1.0, 0.0, m1);
mat.set(2, y1, x1, 0.0, 1.0, n1);
mat.set(3, x2, -y2, 1.0, 0.0, m2);
mat.set(4, y2, x2, 0.0, 1.0, n2);
mat.gauss(ans);
double a, b, ak=ans[1], bk=ans[2], k, d1=ans[3], d2=ans[4];
k = sqrt(ak*ak+bk*bk);
a = ak/k; b = bk/k;
int cnt=0;
for (int i=1; i<=n; ++i) {
if (fabs(ak*x[i]-bk*y[i]+d1-u[i])<eps && fabs(bk*x[i]+ak*y[i]+d2-v[i])<eps)
if (++cnt>=(n+1)/2) {
//cout<<"a: "<<a<<endl;
//cout<<"b: "<<b<<endl;
if (a>0&&b>0 || a<0&&b>0) printf("%.10lf\n", acos(a));
else printf("%.10lf\n", -acos(a));
printf("%.10lf\n", k);
printf("%.10lf %.10lf\n", d1, d2);
exit(0);
}
}
}
void solve() {
srand(time(0));
scanf("%d", &n);
for (int i=1; i<=n; ++i) scanf("%lf%lf%lf%lf", &x[i], &y[i], &u[i], &v[i]);
int a, b;
mat.resize(4, 5);
while (1) {
do {a=rand()%n+1, b=rand()%n+1;} while (a==b);
check(x[a], y[a], u[a], v[a], x[b], y[b], u[b], v[b]);
}
}
}
signed main()
{
//task1::solve();
task::solve();
return 0;
}
题解 Walker的更多相关文章
- csps模拟84Smooth,Six,Walker题解
题面:https://www.cnblogs.com/Juve/articles/11733280.html smooth: 暴力强筛到7e7有60分... 正解: 维护一个队列,存所有的B-光滑数, ...
- 2019牛客多校第二场 A Eddy Walker(概率推公式)
2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...
- 8.7考试总结(NOIP模拟)[Smooth·Six·Walker]
前言 踩了挺多以前没踩过的坑... T1 一开始是打了一个 60pts 的 DFS ,在与暴力拍了几组数据保证正确性之后, 突然想到 BFS 可能会更快一些,然后就又码了一个 BFS,又和 DFS 拍 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
随机推荐
- 64. Minimum Path Sum 动态规划
description: Given a m x n grid filled with non-negative numbers, find a path from top left to botto ...
- Java | 字符串缓冲区(StringBuilder)
为什么要出现字符缓冲区 我们都知道,String类是不可变的,但是有的时候,我们要用到字符串的拼接,如果拼接的数量小的时候,还可以,但是如果拼接的数据量太大的话,内存的占用就太大了,所以这个时候再用S ...
- ARTS第六周
第六周.后期补完,太忙了. 1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有 ...
- 北京大公司:你是熟悉Map集合吗?
<对线面试官>系列目前已经连载30篇啦,这是一个讲人话面试系列 [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 &am ...
- Discuz! X3.4 邮件设置 使用qq邮箱发邮件
1. 在qq邮箱->设置中,获取授权码 2. 在discuz后台配置基础信息 3. 在服务器的防火墙中添加规则,允许访问465端口
- 解决 centerOS7部署ajango2.2.x版本 报SQLite 3.8.3 or later is required (found 3.7.17).错误
在CentOS7上部署Django的时候,遇到了一些问题,写篇笔记记录解决过程. 报错信息 当python3 manage.py runserver启动django项目的时候,就会出现报错信息如下: ...
- 每天五分钟Go - 常量
常量的声明 常量使用const进行对不会被改变值的修饰符 const 常量名 [常量类型] = 常量值,和变量的声名一样可以省略类型 const a=1 const b="a" c ...
- 【洛谷P1061 Jam的计数法】搜索
分析 超级暴力,在尾部+1,再判断. AC代码 type arr=array[0..27]of longint; var st:string; a:array[0..27]of longint; s, ...
- Linux bash命令行常用快捷键(Xshell和secure CRT以及gnome-terminal)
常用的命令行击键操作 ctrl + insert xshell中复制,可以设置选中内容自动复制ctrl shift + c crt中复制shift + insert xshell中粘贴ctrl s ...
- DNS的原理和解析过程
DNS的解析原理和过程: 在Internet上域名和IP是对应的,DNS解析有两种:一种是正向解析,另外一种是反向解析. 正向解析:正向解析就是将域名转换成对应的 IP地址的过程,它应用于在浏览器地址 ...