P3680 凸輪廓線
看到這題時,我居然無知的認為這是一道水題,全然不顧那紫色…
在提交了40遍後,我明白了…
這(tmd)可(hao)真(nan)水…
如果不會三角函式出門右轉DFS_BFS_DP的題解
uses math;
var i,j,k:longint;
ans:extended;
m,n:longint;
s:ansistring;
l,r:longint;
p,t:extended;
sum:extended;
function half(ch:char):extended;
begin
if ch='S' then exit(2);
if ch='C' then exit(pi/2);
if ch='T' then exit(1.5);
end;
function delta(a,b:extended):extended;
var cosA,cosB,cosC,angle,c:extended;
begin
c:=sqrt(a*a+b*b);
cosA:=(b*b+c*c-a*a)/(2*b*c);
angle:=arccos(cosA)/pi*180;
exit(angle);
end;function delta2(a,b:extended):extended;
var cosA,cosB,cosC,angle,c:extended;
begin
c:=sqrt(b*b-a*a);
cosA:=(b*b+c*c-a*a)/(2*b*c);
angle:=arccos(cosA)/pi*180;
exit(angle);
end;
begin
readln(n);
readln(s);
n:=length(s);
ans:=n*2-2;
//找第一個不是三角形
l:=1;
while (s[l]='T') and (l<n) do inc(l);
r:=n;
while (s[r]='T') and (r>1) do dec(r);
if (l>r) then//全是三角形
begin
ans:=n*2+1;
write(ans:0:9);
exit;
end;
//一個從前往後,一個從後往前,只講一個。
if l=1 then
ans:=ans+half(s[1])
else
begin
if s[l]='C' then //三角函式還是很重要的
begin
sum:=delta(sqrt(3)*0.5-0.5,l-1)+delta2(sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+(l-1)*(l-1)-0.25),
sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+(l-1)*(l-1)));//利用三角函式求角度
ans:=ans+1+{切線的特點}sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+(l-1)*(l-1)-0.25)-(l-1-0.5)+{弧長:}(90-sum)/360*pi;{注意三角函式用的是弧度}
end
else
//正方形簡單多了,勾股定理套一下就好了QAQ
ans:=ans+1+sqrt((1-0.5*sqrt(3))*(1-0.5*sqrt(3))+(l-1-0.5)*(l-1-0.5))-(l-2);
end;
if r=n then
ans:=ans+half(s[n])
else
begin
if s[r]='C' then
begin
sum:=delta(sqrt(3)*0.5-0.5,n-r)+delta2(sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+(n-r)*(n-r)-0.25),
sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+(n-r)*(n-r)));
ans:=ans+1+sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+(n-r)*(n-r)-0.25)-(n-r-0.5)+(90-sum)/360*pi;
end
else
ans:=ans+1+sqrt((1-0.5*sqrt(3))*(1-0.5*sqrt(3))+(n-r-0.5)*(n-r-0.5))-(n-r-1);
end;
write(ans:0:9);
end.//誒,AC了。
在第43次提交時AC…
因為我評了黑題,它黑了
附上C++,畢竟我轉C了QAQ
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<string.h>
#include<algorithm>
#define For(i,f,l) for(int pd=(f<l)*1+(l<=f)*-1,i=f;i!=l+pd;i+=pd)
#define repeat for(;;){
#define until(x) if(x){break;}}
#define pi 3.1415926535
using namespace std;
int i,j,k,l,r,n;
double ans,sum,Long;
char s[100];
double Helf(char ch)
{
if(ch=='S')return 2.0;
if(ch=='C')return pi/2;
if(ch=='T')return 1.5;
}
double Delta(double a,double b)
{
double CosA,Angle,c;
c=sqrt(a*a+b*b);
CosA=b/c;
Angle=acos(CosA)/pi*180;
return Angle;
}
double Delta_2(double a,double b)
{
double CosA,Angle,c;
c=sqrt(b*b-a*a);
CosA=(2*b*b-2*a*a)/(2*b*c);
Angle=acos(CosA)/pi*180;
return Angle;
}
int main()
{
cin>>n;
for(i=1;i<=n;i++)cin>>s[i];
ans=n*2-2;
l=1;r=n;
while(s[l]=='T'&&l<n)l++;
while(s[r]=='T'&&r>1)r--;
if(l>r)
{
ans=n*2+1;
cout<<fixed<<setprecision(9)<<ans;
return 0;
}
if(l==1)
ans+=Helf(s[1]);
else
{
Long=l-1;
if(s[l]=='C')
{
sum=Delta(sqrt(3)*0.5-0.5,Long)+Delta_2(
sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+Long*Long-0.25),
sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+Long*Long));
ans+=1+sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+Long*Long-0.25)-(Long-0.5)+(90-sum)/360*pi;
}
else
ans+=+1+sqrt((1-0.5*sqrt(3))*(1-0.5*sqrt(3))+(Long-0.5)*(Long-0.5))-(Long-1);
}
if(r==n)
ans+=Helf(s[n]);
else
{
Long=n-r;
if(s[r]=='C')
{
sum=Delta(sqrt(3)*0.5-0.5,Long)+Delta_2(
sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+Long*Long-0.25),
sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+Long*Long));
ans+=1+sqrt((sqrt(3)*0.5-0.5)*(sqrt(3)*0.5-0.5)+Long*Long-0.25)-(Long-0.5)+(90-sum)/360*pi;
}
else
ans+=+1+sqrt((1-0.5*sqrt(3))*(1-0.5*sqrt(3))+(Long-0.5)*(Long-0.5))-(Long-1);
}
cout<<fixed<<setprecision(9)<<ans;
}
相關文章
- 1218 輪廓線
- OpenCV計算機視覺學習(8)——影像輪廓處理(輪廓繪製,輪廓檢索,輪廓填充,輪廓近似)OpenCV計算機視覺
- 滑鼠樣式/表單輪廓線
- opencv——輪廓發現與輪廓(二值影像)分析OpenCV
- CSS outline輪廓CSS
- 影像輪廓處理
- OpenCV 查詢輪廓OpenCV
- 刪除按鈕點選後的虛線輪廓
- answerOpenCV輪廓類問題解析OpenCV
- 【OpenCV教程】輪廓檢測過程OpenCV
- CSS 不規則的輪廓-outlineCSS
- 畫素寶典 #10 四足動物、人走路/輪廓線/風
- Python 影像處理 OpenCV (15):影像輪廓PythonOpenCV
- 邊框(Border) 和 輪廓(Outline) 屬性
- P6275 [USACO20OPEN]Sprinklers 2: Return of the Alfalfa P 輪廓線DP
- AE/PR外掛-抽象線條輪廓描邊視覺特效Curve Tracer抽象視覺特效
- python如何獲取最優輪廓係數Python
- OpenCv查詢輪廓-cv2.findContours()函式OpenCV函式
- 鑲嵌資料集工具小結(二)鑲嵌資料輪廓線與邊界
- 地圖小區景點邊界輪廓實現地圖
- OpenCV7影像金字塔與輪廓檢測OpenCV
- 提取圖片中目標物輪廓的畫素尺寸
- WPF 筆跡演算法 從點集轉筆跡輪廓演算法
- 文化共創深入高校 “旖夢敦煌”課程勾勒“夢”之輪廓
- 輪廓檢測論文解讀 | Richer Convolutional Features for Edge Detection | CVPR | 2017
- 【Python】【OpenCV】關於cv2.findContours()輪廓索引(編號)解析(RETR_TREE)PythonOpenCV索引
- python-opencv 影像捕捉多個不規則輪廓,與輪廓內接區域(圓/矩形)思路-持續更新編輯中(會附上詳細的思路解釋和圖片)PythonOpenCV
- 分割結果視覺化,把標籤mask輪廓顯示在原圖上視覺化
- halcon中將xld輪廓或者region區域繪製在影像上並儲存
- 非凸科技&CSDN,線上直播,乾貨滿滿
- bzoj 4899 記憶的輪廓 題解(概率dp+決策單調性優化)優化
- 輪廓檢測論文解讀 | 整體巢狀邊緣檢測HED | CVPR | 2015巢狀
- 關於 線性規劃 非線性規劃 與 凸優化優化
- 麥輪車巡線
- 輪詢、長輪詢、短連線、長連線區別對比
- 物體三維模型的構建:3DSOM軟體實現側影輪廓方法模型3D
- Deep Snake : 基於輪廓調整的SOTA例項分割方法,速度32.3fps | CVPR 2020
- 榮耀9X輪廓圖曝光,採用升降前攝+真全面屏,顏值不俗!