阿姆斯特朗回旋加速喷气式阿姆斯特朗炮
題目來源:https://biancheng.love/contest-ng/index.html#/34/problems
題目描述
時代在進步,在Nova君的改進下,阿姆斯特朗回旋加速噴氣式阿姆斯特朗炮終于進化成為了先進的電磁軌道炮,不僅能夠在直筒中發(fā)射直線型電磁炮,還能利用正負極磁場,在兩座炮臺間形成弧形電磁炮,大大加強了御敵能力。某一天,天人(外星人)入侵了地球,現(xiàn)在要用阿姆斯特朗回旋加速噴氣式阿姆斯特朗炮進行轟擊,簡化圖如下: ![] (http://ww1.sinaimg.cn/mw690/006jMFyngw1eyupfrs57wj30kg0drgm3.jpg)
現(xiàn)在抽象問題,假設(shè)外星人都在X軸上方(不含X軸本身)出現(xiàn),現(xiàn)在有三門阿姆斯特朗回旋加速噴氣式阿姆斯特朗炮,中間的A炮,可以發(fā)射以原點O為起點的任意射線的電磁炮,其方向向量和X軸正方向夾角為Θ,可以消滅位于射線的所有敵人,位于兩翼的炮B和炮C形成電磁回路,兩炮口間有半圓形的弧形電磁炮,可以消滅位于弧形線上的所有敵人,設(shè)半圓的半徑為R。每當發(fā)現(xiàn)敵人,A炮可以計算出敵人與O點連線和X軸正方向的夾角Θi,B炮和C炮可以計算出敵人所處弧形炮的半徑Ri?,F(xiàn)在有N個敵人,至少需要發(fā)射幾次炮彈才能清理所有的外星人?(B、C聯(lián)動只算發(fā)射一次)
PS:
(1) 假設(shè)Θi為角度制,范圍1~179(單位:度)
(2) 假設(shè)敵人出現(xiàn)的最大半徑為1000
輸入
多組測試數(shù)據(jù)(組數(shù)不超過10),對于每組數(shù)據(jù),輸入N+1行,第一行輸入一個正整數(shù)N,代表外星人的個數(shù)。接下來的N行,每行輸入兩個正整數(shù),為對應(yīng)的A炮計算出的Θi 和 B、C炮計算出的Ri。
輸出
對于每組數(shù)據(jù),輸出一行,代表發(fā)射的最少次數(shù)。
輸入樣例
3 1 2 2 2 3 4輸出樣例
2代碼:
1 #include<iostream> 2 #include<cstdio> 3 #include<list> 4 #include<algorithm> 5 #include<cstring> 6 #include<string> 7 #include<queue> 8 #include<stack> 9 #include<map> 10 #include<vector> 11 #include<cmath> 12 #include<memory.h> 13 #include<set> 14 15 long long TNF=99999999; 16 #define LL __int64 17 #define eps 1e-8 18 19 20 using namespace std; 21 22 #define M 400000100 23 24 #define inf 0xfffffff 25 26 27 vector<int>G[1212]; 28 29 char tempmp[1212]; 30 int mp[1212][1212]; 31 int lmarry[1212],rmarry[1212]; 32 bool visl[1212],visr[1212]; 33 34 int dis[2][4]={0,-1,0,1,1,0,-1,0}; 35 36 int n=1000,m=1000,k; 37 38 void clear() 39 { 40 memset(lmarry,-1,sizeof(lmarry)); 41 memset(rmarry,-1,sizeof(rmarry)); 42 memset(visl,false,sizeof(visl)); 43 memset(visr,false,sizeof(visr)); 44 memset(mp,0,sizeof(mp)); 45 for(int i=0;i<1212;i++) 46 G[i].clear(); 47 } 48 49 bool dfs(int x) 50 { 51 visl[x]=true; 52 for(int i=0;i<G[x].size();i++) 53 { 54 int v=G[x][i]; 55 if(!visr[v]) 56 { 57 visr[v]=true; 58 if(lmarry[v]==-1 || dfs(lmarry[v])) 59 { 60 lmarry[v]=x; 61 rmarry[x]=v; 62 return 1; 63 } 64 } 65 } 66 return 0; 67 } 68 69 70 int main(void) 71 { 72 while(~scanf("%d",&k)) 73 { 74 clear(); 75 int u,v; 76 for(int i=0;i<k;i++) 77 { 78 scanf("%d %d",&u,&v); 79 G[u].push_back(v); 80 } 81 int ans=0; 82 for(int i=1;i<=n;i++) 83 { 84 memset(visr,false,sizeof(visr)); 85 if(dfs(i)) 86 ans++; 87 } 88 printf("%d",ans); 89 memset(visl,false,sizeof(visl)); 90 memset(visr,false,sizeof(visr)); 91 printf("\n"); 92 } 93 }
?
?轉(zhuǎn)載于:https://www.cnblogs.com/zpfbuaa/p/5037565.html
總結(jié)
以上是生活随笔為你收集整理的阿姆斯特朗回旋加速喷气式阿姆斯特朗炮的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: could not establish
- 下一篇: 网络不通问题的排查