日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SDOI2018 物理实验

發(fā)布時(shí)間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDOI2018 物理实验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SDOI2018 物理實(shí)驗(yàn)

題意:二維平面上有一條直線,直線上放置了一個(gè)激光發(fā)射器,會(huì)向?qū)к墐蓚?cè)沿導(dǎo)軌垂直方向發(fā)射寬度為 L 的激光束。平面上還有 n 條線段,并且線段和線段、線段和直線之間都沒有公共點(diǎn),線段和直線的夾角不超過 85?,激光束不能穿透線段,你需要求出激光束能照射到的線段長度之和的最大值。
做法:先進(jìn)行坐標(biāo)變換,將給定直線移到x軸上,注意首先將直線的一端移到原點(diǎn),然后再旋轉(zhuǎn)。(樣例數(shù)據(jù)全都從原點(diǎn)出發(fā)。。。沒發(fā)現(xiàn)。就gg了十幾發(fā),好腦殘啊。。)考慮將每個(gè)線段投影到直線上,這些點(diǎn)將直線分成一些線段,對(duì)于每一段,找到它上方最近的那個(gè)線段,然后計(jì)算單位長度的貢獻(xiàn),最后的答案就可以雙指針求出了。對(duì)于查詢上方最近的線段,使用set維護(hù)掃描線即可。雙指針還寫崩了。。。這題出出來就gg了啊。。。碼力弱炸,還手殘。

#include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define per(i,a,b) for(int i=(a);i>=(b);--i) #define pb push_backtypedef long double db;const db EPS = 0; const db INF = 1e100; inline int sgn(db x, db E = EPS){return x<-E?-1:x>E;} inline int cmp(db a,db b,db E = EPS){return sgn(a-b, E);}struct P{db x,y;bool operator<(P o) const { return cmp(x,o.x) != 0? cmp(x,o.x) == -1 : cmp(y,o.y) == -1; }bool operator>(P o) const { return cmp(x,o.x) != 0? cmp(x,o.x) == 1 : cmp(y,o.y) == 1; }bool operator==(P o) { return cmp(x,o.x) == 0 && cmp(y,o.y) == 0; }void read(){ int _x,_y; scanf("%d%d",&_x,&_y); x=_x,y=_y; }P operator + (P o) { return {x+o.x,y+o.y}; }P operator - (P o) { return {x-o.x,y-o.y}; }db det(P o) { return x*o.y-y*o.x; }db dot(P o){ return x*o.x+y*o.y; }db disTo(P p) { return (*this - p).abs(); }db alpha() { return atan2(y, x); }db abs() { return sqrt(abs2());}db abs2() { return x * x + y * y; }P rot(db a) {db c = cos(a), s = sin(a);return {c*x-s*y, s*x+c*y};} };struct L {P ps[2];L(){}L(P p1, P p2) { ps[0] = p1, ps[1] = p2; }P& operator[](int i) { return ps[i]; }P dir() { return ps[1] - ps[0]; }bool include(P p) { return sgn((ps[1]-ps[0]).det(p-ps[0])); } };db nowx = 0; int top[100010]; vector<db> scan; int sc;struct seg {P u, v; int id; db k;seg(){}seg(P _u, P _v, int _id) {id = _id; u = _u; v = _v;k = (v.y - u.y) / (v.x - u.x);}bool operator < (const seg a) const {db v1 = u.y + k * (nowx - u.x);db v2 = a.u.y + a.k * (nowx - a.u.x);if( cmp(v1, v2) == 0 ) return k < a.k;return v1 < v2;} }; set< seg > S; set< seg >::iterator it[100010];struct Q {P e; int id;bool operator < (Q a) {if(e == a.e) return id < a.id;return e < a.e;} }; vector< Q > qs; vector<db> cal(vector<L> ls) {int n = ls.size();qs.clear();rep(i,0,n-1) {if(ls[i][0].x > ls[i][1].x) swap(ls[i][0], ls[i][1]);qs.pb({ls[i][0], -i-1});qs.pb({ls[i][1], i+1});}sort(qs.begin(),qs.end());nowx = 0; S.clear();rep(i,0,sc-1) top[i] = -1;for(int j = 0, i = 0; i < sc; ++ i) {nowx = scan[i];for( ; j < qs.size() && qs[j].e.x <= nowx ; ++j) {if(qs[j].id < 0) {int ID = (-qs[j].id)-1;it[ID] = S.insert(seg(ls[ID][0],ls[ID][1],ID)).first;}else {int ID = qs[j].id-1;S.erase(it[ID]);}}if(!S.empty()) top[i] = (*S.begin()).id;}function<db(int)> cost = [&](int tp) -> db {return abs( ls[tp][0].disTo(ls[tp][1]) / (ls[tp][1].x - ls[tp][0].x) );};vector<db> V;rep(i, 0, sc-2) {if(top[i] != -1) V.pb(cost(top[i])); else V.pb(0);}return V; }db pv[100010], pc[100010];db cala(vector< pair<db,db> > &V, db Len) {function<db(db,int,int)> MX = [&](db LL, int p1, int p2) -> db {db tmp = 0;if(0 <= p1 && p1 <= sc-2) tmp = max(tmp, V[p1].second * min(LL, V[p1].first) );if(0 <= p2 && p2 <= sc-2) tmp = max(tmp, V[p2].second * min(LL, V[p2].first) );return tmp;};db ans = 0;int p1 = 0, p2 = 0; db tC = 0, tL = 0;do {if(Len >= tL) ans = max(ans, tC + MX(Len-tL, p1-1, p2 ) );if(p2 < sc-1 && cmp(tL + V[p2].first, Len) <= 0) {tL += V[p2].first;tC += V[p2].first * V[p2].second;++ p2;}else if(p1 <= p2) {tL -= V[p1].first;tC -= V[p1].first * V[p1].second;++ p1;}else {if(p2 < sc-1) {tL += V[p2].first;tC += V[p2].first * V[p2].second;++ p2;}if(p1 <= p2) {tL -= V[p1].first;tC -= V[p1].first * V[p1].second;++ p1;}}if(Len >= tL) ans = max(ans, tC + MX(Len-tL, p1-1, p2 ) );} while(p1 < sc-1 || p2 < sc-1);return ans; }int n; L line[100010]; P p1, p2; db Len; vector<L> UP, LW;void init() {UP.clear(); LW.clear();if(p1 > p2) swap(p1, p2);db a = -(p2-p1).alpha();rep(i,0,n-1) {line[i][0] = (line[i][0]-p1).rot(a);line[i][1] = (line[i][1]-p1).rot(a);if( sgn(line[i][0].y) == 1 ) UP.pb(line[i]);else LW.pb( L( {line[i][0].x, -line[i][0].y} , {line[i][1].x, -line[i][1].y} ) );}scan.clear();rep(i,0,(int)UP.size()-1) { scan.pb(UP[i][0].x), scan.pb(UP[i][1].x); }rep(i,0,(int)LW.size()-1) { scan.pb(LW[i][0].x), scan.pb(LW[i][1].x); }sort(scan.begin(),scan.end()); scan.erase( unique(scan.begin(),scan.end()), scan.end());sc = scan.size(); }int main() {int _; scanf("%d",&_);while(_--) {scanf("%d",&n);rep(i,0,n-1) {line[i][0].read();line[i][1].read();}p1.read(), p2.read();int t; scanf("%d",&t), Len = t;init();vector<db> V1 = cal(UP);vector<db> V2 = cal(LW);vector<pair<db,db>> V;rep(i, 0, (int)V1.size()-1) {V.pb({scan[i+1]-scan[i], V1[i] + V2[i]});}db ans = cala(V, Len);printf("%.12Lf\n",ans);}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/RRRR-wys/p/10952057.html

總結(jié)

以上是生活随笔為你收集整理的SDOI2018 物理实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 二级黄色片 | 国产小视频在线观看免费 | 中文字幕日本视频 | 91亚洲视频| 亚洲无人区码一码二码三码 | 欧美三级在线观看视频 | 亚洲国产精品一区二区三区 | 成人av软件| 四虎国产| 天堂草在线观看 | 男女洗澡互摸私密部位视频 | 大奶在线播放 | 成年人免费网址 | 亚洲23p | 国产欧美日韩精品在线观看 | 中国成人av | 杨贵妃颤抖双乳呻吟求欢小说 | 中文字幕第 | 午夜精品福利一区二区蜜股av | 一级做a免费视频 | 视频在线观看电影完整版高清免费 | 少妇精品一区二区三区 | 97视频一区 | 日韩在线视频不卡 | 秒拍福利视频 | 米奇色 | 国产精品一区二 | 国产污污在线观看 | 日韩免费a| 波多野结衣在线免费观看视频 | 欧美,日韩,国产在线 | 精品国自产在线观看 | 丝袜老师办公室里做好紧好爽 | mm131国产精品| 午夜日韩电影 | 亚洲精品一区二区三区不卡 | 日韩人妻无码精品久久免费 | 久久精品视频免费播放 | wwwxx在线 | 顶级黄色片 | 国产精品久久久久久久久久久久久久久久久 | 女同hd系列中文字幕 | 欧美成人二区 | 韩国黄色精品 | 成人免费看类便视频 | 99免费看 | 黄色二级毛片 | 91成人午夜 | 又黄又免费的视频 | 中文字幕在线观看精品 | 青青草免费观看视频 | 亚洲一在线 | 拔插拔插华人 | 国产乱码一区二区 | 亚洲黄在线观看 | 不卡视频在线 | 免费在线播放黄色片 | 欧美成人影音 | 五月天婷婷在线观看 | 成人性生活免费看 | 欧美日韩在线综合 | 自拍偷拍亚洲区 | 国产福利91精品 | 五月网婷婷| 波多野结衣家庭主妇 | 日韩xxx高潮hd | 国产美女极度色诱视频www | 人人妻人人藻人人爽欧美一区 | 五月婷婷一区二区 | 日韩爆操 | 在线播放亚洲 | 天天干天天操天天操 | 97精品人妻一区二区三区 | 午夜aa | av优选在线观看 | 国产精品一卡 | 正在播放经典国语对白 | 玉米地疯狂的吸允她的奶视频 | 伦hdwww日本bbw另类 | www.男人的天堂 | 国产精品国产三级国产aⅴ中文 | 国产一级做a爰片久久毛片男男 | 啊v视频在线观看 | 青青成人 | 亚洲精品高清无码视频 | 91精品国产综合久久福利软件 | 成人免费视频国产 | 老妇裸体性激交老太视频 | 国模私拍视频在线 | 久热伊人 | 国产91综合一区在线观看 | 快色网站| 久操免费在线视频 | 国产精品久久久999 www日本高清视频 | 色屁屁www影院免费观看入口 | 办公室大战高跟丝袜秘书经理ol | 亚洲美女av网站 | 日韩av在线免费 | www.在线视频 |