給你乙個凸多邊形,和多邊形內一點$p$,求其滾動一圈,點$p$的軌跡長。
$0\leq n\leq50$
**題。對於每個頂點求其與點$p$的距離和兩條邊的夾角即可。
#include#include#include#include#include#includeusing namespace std;
templateinline void read(t& s)
while(c>='0' && c<='9')
s*=f;
}const double pi = acos(-1);
template t rabs(t x)
struct node
void readp()
double the()
double dis()
}s[100],xx;
node operator - (node a,node b)
int n;
int main()
printf("%.3lf\n",ans);
return 0;
}
求氣泡排序外層迴圈執行$k$次後的序列。
$2\leq n \leq 10^5$。
首先觀察發現 氣泡排序每進行一次,每個數字最多向後移動一次,但向前移次數沒有限制。
也就是說,最終序列的第$1$項一定是原序列的第$1$項到第$k+1$項裡面其中乙個。
顯而易見,第$1$項一定是這裡面最小的乙個(如果存在乙個比它更小的,那麼$k$次操作後它一定在這個數字的前面,所以最小的乙個一定是第$1$項)。
同理,第$2$項一定是剩餘數字加上第$k+2$項內最小的乙個(因為向前移動次數沒有限制,所以需要繼承上次的集合)。
因此,最終只需要維護乙個大小始終為$k+1$的堆,然後每次取最小值即可。
#include#include#include#include#includeusing namespace std;
templateinline void read(t& s)
while(c>='0' && c<='9')
s*=f;
}priority_queueq;
int n,k;
int s[100005];
int ans[100005];
int tot=0;
int main()
$表示當前轉移到了以$i$為根的子樹,選了$j$個葉子的最小代價。
轉移方法顯而易見。
時間複雜度$o(nk)$
以下是(不夠嚴謹的)證明。
顯而易見,將選擇葉子改為選擇節點後,複雜度不變。
先考慮此問題的弱化版,限制不為$k$而是$n$。
對於$x$來講,每一次和子節點$v$的子樹合併,需要列舉$v$的子樹大小和之前已經合併過的$x$的子樹(以下稱之為左側子樹)的大小。
顯然,我們可以視為列舉左側子樹的每乙個點以及$v$的子樹的每乙個點。兩者的計算次數是相等的。
那麼我們可以發現,任意兩個點當且僅當在其最近公共祖先處被合併。
所以總複雜度為$o(n^2)$。
來看原問題。
如果需要合併後的子樹大小沒有超過$k$,和上面問題等價。
如果合併後的子樹大小超過了$k$,那麼選擇的個數上限取$k$。
我們可以認為,個數上限為$k$列舉個數,與子樹大小為$k$枚舉子節點是等價的,顯然這部分的上界是$o(nk)$。
所以當合併後子樹超過$k$時,超過的部分會被刪掉,設多餘的部分為$x$。每次合併的計算次數大約是$kx$(不嚴謹,具體次數還和兒子的具體大小有關,均攤似乎是這個?),這部分是$o(nk)$的。
所以此問題解法複雜度為$o(nk)$。
#include#include#include#include#includeusing namespace std;
templateinline void read(t& s)
while(c>='0' && c<='9')
s*=f;
}int box[100005],las[200005],edv[200005],edw[200005],cnt=0;
void adde(int u,int v,int w)
int n,k;
int rot;
int dd[100005];
long long dp[100005][105];
int yzc[100005];
void dfs(int now,int fa)
dp[now][0]=0;
for(int i=box[now];i;i=las[i])
if(edv[i]!=fa)
}int main()
for(int i=1;i<=n;i++)
if(dd[i]!=1)
dfs(rot,0);
printf("%lld\n",dp[rot][k]);
return 0;
}
NOIP校內模擬 塔
我們可以這樣考慮 x 必定是由若干個立方數拼起來的 因此我們可以逆著求 只需關心每次取哪個立方數即可 設a是最大的 a 使得 a 3 不超過 m 分析樣例 我們發現在第一次的時候 就可以取a或者a 1 那第一次取a 2 a 3.行不行呢?1.用 a,剩下m a 3 2.用 a 1,x 最大為 a 3...
NOIP校內模擬 航班
描述 l因為業務繁忙,經常會到處出差。因為他是航空公司的優質客戶,於是某個航空 公司給了他乙個優惠券。他可以利用這個優惠券在任何乙個國家內的任意城市間免費旅行,當他的路線跨國 才會產生費用。l有乙個航空公司的 表與航線。而且每個城市出發都能到所有的城 市,2 個城市間可能有不止乙個航班,乙個國家內的...
NOIP校內模擬 階乘
描述 有n個正整數a i 設它們乘積為p,你可以給p乘上乙個正整數q,使pq剛好為正整數m的階乘,求m的最小值。輸入共兩行。第一行乙個正整數n。第二行n個正整數a i 輸出共一行 乙個正整數m。樣例輸入16 樣例輸出3提示 樣例解釋 當p 6,q 1時,pq 3!資料範圍與約定 對於10 的資料,n...