A:

题目链接 : https://vjudge.net/contest/250823#problem/A

参考 : https://www.cnblogs.com/helenawang/p/5465481.html

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;const double eps = 1e-8;int cmp(double x){return x < -eps ? -1 : (x>eps);
}double pow2(double x){return x * x;
}double mySqrt(double x){return sqrt(max((double)0, x));
}struct Vec
{double x, y;Vec(){}Vec(double xx, double yy):x(xx), y(yy){}Vec& operator=(const Vec& v){x = v.x;y = v.y;return *this;}double norm(){return sqrt(pow2(x) + pow2(y));}//返回单位向量
    Vec unit(){return Vec(x, y) / norm();}//判等friend bool operator==(const Vec& v1, const Vec& v2){return cmp(v1.x - v2.x)==0 && cmp(v1.y - v2.y)==0;}//+, -, 数乘friend Vec operator+(const Vec& v1, const Vec& v2){return Vec(v1.x + v2.x, v1.y + v2.y);}friend Vec operator-(const Vec& v1, const Vec& v2){return Vec(v1.x - v2.x, v1.y - v2.y);}friend Vec operator*(const Vec& v, const double c){return Vec(c*v.x, c*v.y);}friend Vec operator*(const double c, const Vec& v){return Vec(c*v.x, c*v.y);}friend Vec operator/(const Vec& v, const double c){return Vec(v.x/c, v.y/c);}
};int T;
int ans;
Vec O, A, V, B, C, B1;
int R;//点乘
double dot(const Vec v1, const Vec v2){return v1.x*v2.x + v1.y*v2.y;
}
//叉乘的模长
double product(const Vec v1, const Vec v2){return v1.x*v2.y - v1.y*v2.x;
}//点p到直线v1,v2的投影
Vec project(Vec& v1, Vec& v2, Vec& p){Vec v = v2 - v1;return v1 + v * dot(v, p-v1) / dot(v, v);
}
//点p关于直线v1,v2的对称点
Vec mirrorPoint(Vec& v1, Vec& v2, Vec& p){Vec c = project(v1, v2, p);//printf("project: %lf, %lf\n", c.x, c.y);return (double)2*c - p;
}//判断点p是否在线段v1,v2上
bool onSeg(Vec& v1, Vec& v2, Vec& p){if(cmp(product(p-v1, v2-v1))==0 && cmp(dot(p-v1, p-v2))<=0)return true;return false;
}bool calc_C(){//将AC表示为关于t的参数方程//则与圆的方程联立得到关于t的一元二次方程, a,b,c为一般式的三个系数double a = pow2(V.x) + pow2(V.y);double b = 2*V.x*(A.x - O.x) + 2*V.y*(A.y - O.y);double c = pow2(A.x - O.x) + pow2(A.y - O.y) - pow2(R);double delta = pow2(b) - 4*a*c;if(cmp(delta) <= 0) return false;else{double t1 = (-b - mySqrt(delta))/(2*a);double t2 = (-b + mySqrt(delta))/(2*a);double t;if(cmp(t1) >= 0) t = t1;if(cmp(t2) >= 0 && t2 < t1) t = t2;//取较小的那个,即为离A近的那个交点C.x = A.x + V.x*t;C.y = A.y + V.y*t;return true; //有交点
    }
}int main()
{freopen("5572.txt", "r", stdin);scanf("%d", &T);for(int ca = 1; ca <= T; ca++){scanf("%lf%lf%d", &O.x, &O.y, &R);scanf("%lf%lf%lf%lf", &A.x, &A.y, &V.x, &V.y);scanf("%lf%lf", &B.x, &B.y);if(calc_C()){if(onSeg(A, C, B)) ans = 1;else{//printf("has intersection (%lf, %lf)\n", C.x, C.y);Vec A1 = mirrorPoint(O, C, A);// printf("A: %lf, %lf\n", A.x, A.y);// printf("A1: %lf, %lf\n", A1.x, A1.y);//printf("B1 (%lf, %lf)\n", B1.x, B1.y);if(A==A1){Vec u = B - O;Vec v = C - O;// printf("OB: %lf %lf\n", u.unit().x, u.unit().y);// printf("OC: %lf %lf\n", v.unit().x, v.unit().y);if(u.unit() == v.unit()){ans = 1;}else ans = 0;}else {Vec u = B - C;Vec v = A1 - C;if(u.unit() == v.unit()){ans = 1;}else ans = 0;}}}else{//运动方向不变,则AB与V同向才可碰到B//printf("no intersection\n");Vec temp = B - A;if(temp.unit() == V.unit())ans = 1;else ans = 0;}printf("Case #%d: %s\n", ca, ans ? "Yes" : "No");}return 0;
}

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-8;int sgn(double x)
{if(fabs(x) <= eps) return 0;if(x <0 )return -1;else return 1;
}struct Point{double x,y;Point(){}Point(double _x ,double _y){x = _x, y = _y;}// 利用函数重载求各种点之间的运算Point operator +(const Point &b)const{return Point(x+b.x, y+b.y);}Point operator -(const Point &b)const{return Point(x-b.x, y-b.y);}double operator *(const Point &b)const{return (x*b.x + y*b.y);}double operator ^(const Point &b)const{return (x*b.y - y*b.x);}Point operator *(const double &k)const{return Point(x*k, y*k);}Point operator /(const double &k)const{return Point(x/k, y/k);}// 求点绕远点逆时针旋转后的坐标, 角度A是弧度制void transXY(double A){x = x*cos(A) - y*sin(A);y = x*sin(A) + y*cos(A);}double len(){return hypot(x,y);}  // hypot用于求平方和再开方double len2() {return x*x + y*y;}// 求两点之间的距离double distance(Point p){return hypot(x-p.x ,y-p.y );}Point trunc(double r) {double l = len();if(!sgn(l)) return *this;r /= l;return Point (x*r, y*r);}
};struct Line {Point s,e;Line(){}Line(Point _s,Point _e)  {s = _s;e = _e;}double length(){ return s.distance(e);}pair<int,Point> operator &(const Line &b)const {Point res = s;if(sgn((s-e)^(b.s-b.e)) == 0) {if(sgn((s-b.e)^(b.s-b.e)) == 0) return make_pair(0,res);else return make_pair(1,res);}double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));res.x += (e.x-s.x)*t;res.y += (e.y-s.y)*t;return make_pair(2,res);}int relation(Point p) {int c = sgn((p - s) ^ (e - s));if(c < 0) return 1;else if(c > 0) return 2;else return 3;}double disPointtoline(Point p) { return fabs((p-s)^(e-s))/length();}double disPointtoseg(Point p) {if(sgn((p - s) * (e - s)) < 0 || sgn((p - e) * (s - e)) < 0)return min(p.distance(s), p.distance(e));return disPointtoline(p);}Point lineprog(Point p) { return s+(((e-s)*((e-s)*(p-s)))/((e-s).len2()));}Point symmetryPoint(Point p) {Point q = lineprog(p);return Point(2*q.x-p.x, 2*q.y-p.y);}
};struct Circle {Point p;double r;int relationline(Line v) {double dst = v.disPointtoline(p);if(sgn(dst-r) < 0) return 2;else if(sgn(dst-r) == 0) return 1;return 0;}int Pointcrossline(Line v, Point &p1, Point &p2) {if(!(*this).relationline(v)) return 0;Point a = v.lineprog(p); double d = v.disPointtoline(p);d = sqrt(r*r-d*d);if(sgn(d) == 0) {p1 = a; p2 = a; return 1;}p1 = a + (v.e - v.s).trunc(d);p2 = a - (v.e - v.s).trunc(d);return 2;}int relationseg(Line v) {double dst = v.disPointtoseg(p);if(sgn(dst - r) < 0) return 2;else if(sgn(dst - r) == 0) return 1;else return 0;}
};int main() {int t;scanf("%d", &t);Circle c;Point a, v, b;for(int o = 1; o <= t; o++) {printf("Case #%d: ", o);scanf("%lf %lf %lf", &c.p.x, &c.p.y, &c.r);scanf("%lf %lf %lf %lf", &a.x, &a.y, &v.x, &v.y);scanf("%lf %lf", &b.x, &b.y);Line ab = Line(a, b);Point av = a + v;Line l = Line(a, av);int flag = 0;if(l.relation(b) == 3 && sgn((b-a)*(av-a)) > 0 && c.relationseg(ab) <= 1) flag = 1;else {Point p1, p2;if(c.Pointcrossline(l, p1, p2) == 2) {Point m = sgn(a.distance(p1) - a.distance(p2)) < 0 ? p1 : p2;Line f(c.p, m);Point q = f.symmetryPoint(a);Line tmp(m, q);if(tmp.relation(b) == 3 && sgn(((b-m)*(q-m)))>0) flag = 1;}}puts(flag?"Yes":"No");}return 0;
}

K:

题目链接 : https://vjudge.net/contest/250823#problem/K

输出没有加Case狂wa, 坑爹啊;

#include<iostream>
#include<cstdio>
#include<vector>using namespace std;
#define ll long long
const int maxn = 100010;ll cal(ll a)  // 计算平方
{return a*a;
}vector<int > v;  // 用于存每一个子序列的长度int main()
{int t;cin >> t;int j =0;while(j++ < t){string s;cin >> s;v.clear();  // 清空v.push_back(0);  // 在数组首加入0int last = s[0];ll ans = 0, cnt = 1;for(int i = 1; i < s.size(); i++)  // 从第二个字符开始遍历
        {if(s[i] == s[i-1])  // 相等则长度加一
            {cnt++;}else {ans += cal(cnt);    // 加上该子串对结果的贡献,先不考虑更改字符v.push_back(cnt);  // 如果不等则把cnt 记录到数组cnt =1;last = s[i];}}v.push_back(cnt);ans += cal(cnt);// cout << ans << endl;v.push_back(0);  // 在数组尾加入0// for(int i = 0; i < v.size(); i++)// cout << v[i] << " ";ll ans2 = ans;for(int i = 1; i < v.size()-1; i++){ll tmp, tmp2;if(v[i] == 1){tmp = ans+cal(v[i-1]+v[i+1]+1)-1-cal(v[i-1])-cal(v[i+1]);ans2 = max(ans2, tmp);}else{tmp2 = ans+cal(v[i-1]+1)+cal(v[i]-1)-cal(v[i])-cal(v[i-1]);ans2 = max(ans2, tmp2);}}printf("Case #%d: %lld\n", j, ans2);}}

转载于:https://www.cnblogs.com/mrh-acmer/p/9557857.html

2015年上海现场赛重现 (A几何, K暴力搜索)相关推荐

  1. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it

    链接:https://www.nowcoder.com/acm/contest/163/F 来源:牛客网 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it 时间限制:C ...

  2. 树形DP+并查集+左偏树, HDU-5575,Discover Water Tank,2015上海现场赛D题

    只是ACM/IICPC 2015 上海区域赛的一道题.原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5575 题目描述 N-1个木板把一个水箱划分成了N ...

  3. HDU5575 Discover Water Tank 2015上海现场赛D题 (树形dp,并查集,左偏树)

    题目大意: 有一个1维的长度为N,高度无限的水柜,现在要用N-1个挡板将其分为N个长度为1的小格,然后向水柜中注水,水可以低于挡板也可以以溢出去(这样就要与旁边格子的水位相同),现在有M次探测,探测i ...

  4. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers

    传送门 题意:问你从[1,N]有多少个数能被自身的SOD(sum of digits)整除 题解:数位dp,枚举SOD,因为最多只有12位,所以只要枚举1到12*9,一维记录pos,二维记录当前剩余要 ...

  5. 2014 ACM 上海现场赛B,I,J UVALive7146 7147 7139

    2014最难赛区 7146 贪心这道题是考验STL的. 我们按照一个顺序排序(我方攻击力升序,敌方防御力升序), 此时因为要全部歼灭,优先考虑如何干掉敌方防御力最高的,此时将所有攻击力比它高的我方都放 ...

  6. 【weJudge】1106. [ACM][2014新生赛重现][现场]Gundam Unicorn

    你上有一门威力巨大的光束炮,然而它现在剩下的能量只能再发射一次.为了使敌人受到更大的损失,你必须谨慎地使用这仅剩的一次机会. 敌军队形和光束炮的覆盖范围均为矩形(矩形不可旋转). 输入要求 输入数据有 ...

  7. 【weJudge】1107. [ACM][2014新生赛重现][现场]啊~啊~,麻婆豆~腐,麻婆豆~腐~

    麻婆豆腐是小奏最爱的食物,为了做出最上等的麻婆豆腐,小奏准备了若干上等的食材,并且获得了传说中的麻婆豆腐的料理方法:每次将两种食材合二为一,成为一种新的食材,直到所有的食材都合并到一起,传说中的麻婆豆 ...

  8. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...

  9. 2016ACM/ICPC亚洲区大连站现场赛题解报告

    此文章可以使用目录功能哟↑(点击上方[+]) 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原本过的人数比较多的题结果重现过的变少了,而原本现场赛全场过的人最少的题重现做 ...

最新文章

  1. Python3 文件读写(持续更新)
  2. 计算机网络——网络地址转换(NAT)
  3. 《终于有人说出来了——Java不适合于作为主要编程教学语言》我的看法
  4. HDU 4616 Game 树形DP
  5. Dubbo原理解析-监控
  6. C#正则表达式开源工具
  7. 2020年云计算的十大新兴趋
  8. C#数据结构-广义表和递归
  9. jQuery LigerUI 使用教程表格篇(1)
  10. itunes刷机一直正在恢复固件要多久_ios刷机报错故障汇总指南
  11. AD将原理图转换成彩色或者黑白PDF
  12. pycharm代码删除恢复
  13. AF(操作者框架)系列(1)-LabVIEW中的模块化应用概述
  14. 排序算法c语言描述---基数排序
  15. 16进制颜色值与百分比颜色值的换算关系
  16. 连接查询--嵌套查询
  17. FlexRay网络唤醒、启动和错误管理
  18. 性能测试:工具篇:jmeter-命令行使用
  19. 智慧仓储解决方案-最新全套文件
  20. 计算机网络测试—基本网络连接和通信考试

热门文章

  1. Redis——学习之路三(初识redis config配置)
  2. MariaDB Centos7 下安装MariaDB
  3. node.js服务端代码学习
  4. 谷歌浏览器一进百度空间就崩溃的临时解决方法
  5. C#取真实IP地址及分析
  6. JavaScript学习(七十九)—值传递和地址传递
  7. 怎么解决php页面编码问题,PHP页面编码问题
  8. 每天看到那么徒步直播的朋友,他们靠什么生活呢?
  9. erp系统是什么系统软件
  10. “普通人,不要随便创业,安心拿工资过日子比啥都强”你怎么看?