【套題】2015ACM/ICPC亞洲區長春站 HDU5532 5533 5534 5536 5538
- 水幾個題,熟悉一下鍵盤。。。
HDU5532AlmostSortedArray - 題意:
ASA 定義為,僅去掉一個(OneandOnlyOne )元素後陣列是非降序或者非升序。 - 題解:很明顯,判斷一個序列是否有序可以通過判斷其
LongestNonDecreasingSubsquence 或者LongestNonIncreasingSubsquence 是否等於序列長度來得到。
/* **********************************************
File Name: test.cpp
Auther: [email protected]
Created Time: 2015/11/1 12:34:01
*********************************************** */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int INF = 0xfffffff;
const int MAX = 100007;
int a[MAX];
int dp[MAX]; //dp[i] length is i min
int inc(int n) {
fill(dp, dp + n + 1, INF);
dp[0] = -INF;
for (int i = 1; i <= n; ++i) {
int sz = upper_bound(dp, dp + i, a[i]) - dp;
//printf("get %d\n", sz);
dp[sz] = a[i];
}
for (int i = n; i >= 1; --i) {
if (dp[i] < INF) {
return i;
}
}
return 0;
}
int dec(int n) {
reverse(a + 1, a + n + 1);
return inc(n);
}
int main() {
int T, n;
scanf(" %d", &T);
while (T--) {
scanf(" %d", &n);
for (int i = 1; i <= n; ++i) {
scanf(" %d", a + i);
}
puts((inc(n) >= n - 1 || dec(n) >= n - 1) ? "YES" : "NO");
}
return 0;
}
HDU5233DancingStarsonMe - 題意:求一堆點是否構成一個正
n 邊形 - 題解:求凸包,判斷一下
→
- 凸包頂點個數是否為
n - 凸包所有邊是否等長
- 凸包頂點個數是否為
/* **********************************************
File Name: 5533.cpp
Auther: [email protected]
Created Time: 2015年11月02日 星期一 20時33分46秒
*********************************************** */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const double INF = FLT_MAX;
const double EPS = 1e-8;
const double PI = acos(-1.0);
const int MAX = 107;
inline int sign(double x) {
if (fabs(x) < EPS) return 0;
if (x > 0.0) return 1;
return -1;
}
struct Point {
double x, y;
Point() {}
Point(double _x, double _y): x(_x), y(_y) {}
Point operator-(const Point& ne)const {
return Point(x - ne.x, y - ne.y);
}
Point operator+(const Point& b)const {
return Point(x + b.x, y + b.y);
}
Point operator*(const double t)const {
return Point(t * x, t * y);
}
Point operator/(const double t)const {
if (sign(t) == 0) return Point(INF, INF);
return Point(x / t, y / t);
}
double operator^(const Point& b)const {
return (x - b.x) * (x - b.x) + (y - b.y) * (y - b.y);
}
} ping[MAX];
struct Polygon {
Point p[MAX];
int n;
} ans;
inline double xmult(Point o, Point a, Point b) {
return (a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y);
}
bool cmp(const Point& a, const Point& b) {
return a.x < b.x || (sign(a.x - b.x) == 0 && a.y < b.y);
}
void convex_hull(Point p[MAX], int n, Polygon& res) {
res.n = 0;
sort(p, p + n, cmp);
int i, j, top;
for (i = 0, top = 0; i < n; ++i) {
while (top > 1 && xmult(res.p[top - 2], res.p[top - 1], p[i]) < EPS) {
--top;
}
res.p[top++] = p[i];
}
j = top;
for (i = n - 2; i >= 0; --i) {
while (top > j && xmult(res.p[top - 2], res.p[top - 1], p[i]) < EPS) {
--top;
}
res.p[top++] = p[i];
}
res.n = top - 1;
}
int main() {
int T, n;
scanf(" %d", &T);
while (T--) {
scanf(" %d", &n);
for (int i = 0; i < n; ++i) {
scanf(" %lf %lf", &ping[i].x, &ping[i].y);
}
convex_hull(ping, n, ans);
if (n < 3 || ans.n != n) {
puts("NO");
continue;
}
double leng = ans.p[0] ^ ans.p[n - 1];
bool flag = true;
for (int i = 0; i < n - 1; ++i) {
if (sign((ans.p[i] ^ ans.p[i + 1]) - leng)) {
flag = false;
break;
}
}
puts(flag ? "YES" : "NO");
}
return 0;
}
HDU5534PartialTree - 題意:
n 個點連成一棵樹,對某個頂點v ,若其度為degv ,則價值為fdegv 題解:
n 個點,n−1 條邊,共有2∗n−2 個度需要分配。可以證明,首先對每個頂點賦一個度,將剩餘的n−2 個度任意分配給剩下的頂點,均可以得到一棵樹。我們可以簡單地反證一下~- 對每個頂點,最少可能分配到
1 個度,最多可能分配到1+(n−2)=n−1 個度,這是滿足任意一個頂點的度的限制條件1≤degv≤n−1 的。 2∗n−2 個度分配完後,我們可以開始兩兩頂點連邊,每連一條邊,二者的度分別減1 ,先不考慮是否會造成環,那麼
- ① 當僅剩
2 個度時,將對應的兩個點連一條邊,即完成連邊 - ② 當多餘
2 個度時,假設剩餘k 個度,只需要任意選擇兩個度還沒用完的點連線起來,就可以達到度剩餘k−2 的局面
- ① 當僅剩
- 由①②可知, 恰好可以連出
2∗n−22=n−1 條邊。此時,根據我們開始的分配,沒有任何一個點是沒有連至少一條邊的,於是不可能存在孤立頂點;另外,,,,窩好像不能證明整個圖的連通性鴨(;′⌒`)。。。 - 於是可以換一個方向考慮,窩們考慮一個放射形圖案,一個點度為
n−1 ,作為根,其他所有點都是它的孩子,此時為1+1+⋯+(n−1) 的組合,將一個點拿下,連到其它點上,變成1+1+⋯+2+(n−2) 的組合,相當於最後的n−2 個度分了1 個出去,如此下去,可以達到將n−2 分解的任何一種組合。
- 對每個頂點,最少可能分配到
題解續:做完上述分析,我們就可以先考慮一個簡化版本了。容量為
n−2 的揹包,有n−1 件物品,分別為大小為i ,價值為fi ,有無限多個,問裝滿揹包最大獲得價值為多少。
/* **********************************************
File Name: 5534.cpp
Auther: zhengd[email protected]
Created Time: 2015/11/3 22:22:19
*********************************************** */
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> P;
const int INF = 0xfffffff;
const int MAX = 2018;
vector<P> bag;
int dp[MAX];
int f[MAX];
int m;
void push(int weight, int value) {
for (int i = 1; i * weight <= m; i <<= 1) {
bag.push_back(P(weight * i, value * i));
//printf("push (%d, %d)\n", weight * i, value * i);
}
}
int main() {
int T, n;
scanf(" %d", &T);
while (T--) {
bag.clear();
scanf(" %d", &n);
m = n - 2;
for (int i = 1; i < n; ++i) {
scanf(" %d", f + i);
}
int ans = n * f[1];
for (int i = 2; i < n; ++i) {
push(i - 1, f[i] - f[1]);
}
sort(bag.begin(), bag.end());
unique(bag.begin(), bag.end());
fill(dp, dp + m + 1, -INF);
dp[0] = 0;
for (int i = 0; i < bag.size(); ++i) {
for (int j = m; j >= bag[i].first; --j) {
if (dp[j - bag[i].first] + bag[i].second > dp[j]) {
dp[j] = dp[j - bag[i].first] + bag[i].second;
}
}
}
printf("%d\n", dp[m] + ans);
}
return 0;
}
HDU5536ChipFactory - 題意:問最大的
(si+ 相關推薦
【套題】2015ACM/ICPC亞洲區長春站 HDU5532 5533 5534 5536 5538
水幾個題,熟悉一下鍵盤。。。 HDU5532AlmostSortedArray 題意:ASA定義為,僅去掉一個(OneandOnlyOne)元素後陣列是非降序或者非升序。 題解:很明顯,判斷一個序列是否有序可以通過判斷其LongestNonDecreasing
【hdu 5527】 [2015ACM/ICPC亞洲區長春站] Too Rich 貪心
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 673 Accept
【解題報告】2015ACM/ICPC亞洲區瀋陽站
題目連結 B. Bazinga(HDU5510) 思路 設第i個字串儲存在ss[i][]中。本題最直觀最樸素的做法是列舉兩個字串ss[i]和ss[j] (i+1≤j),再用KMP演算法匹配這兩個字串。首先從大到小列舉j,若對某個ss[j]存在某個s
【hdu5538】【2015ACM/ICPC亞洲區長春站 】House Building 題意&題解&程式碼
題目連結: http://acm.hdu.edu.cn/showproblem.php?pid=5538 題意: 給你積木圖的俯檢視,輸入資料表示(i,j)位置放了一個高度為h[i][j]的積木,
【hdu5534】【2015ACM/ICPC亞洲區長春站】Partial Tree 題意&題解&程式碼
題目連結: http://acm.hdu.edu.cn/showproblem.php?pid=5534 題意: 構造一棵有n個節點的數,f[i]表示度數(入度+出度)為i的節點的點權,給出所有的
HDU 5532 Almost Sorted Array(最長非遞減子序列 模板題)——2015ACM/ICPC亞洲區長春站
Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem Description We are
@2015ACM/ICPC亞洲區長春站-重現賽(感謝東北師大) @HDU5534 (Dp,完全揹包)
題目描述 In mathematics, and more specifically in graph theory, a tree is an undirected graph in which any two nodes are connected by exactly
【套題】Codeforces#321 div2
A - Kefa and First Steps 簡單dp /* ********************************************** File Name: a
[hdu 5521][2015ACM/ICPC亞洲區長春站] House Building
House Building Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 624
HDU 5531 Rebuild(三分)——2015ACM/ICPC亞洲區長春站
傳送門 RebuildTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 2483 Accep
[hdu 5534]2015ACM/ICPC亞洲區長春站 Partial Tree 完全揹包
Partial Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 674 Ac
2017 ACM-ICPC 亞洲區(西安賽區)網絡賽: B. Coin 【概率題】
con ont mat -1 bottom using -m desc element Bob has a not even coin(就是一個不均勻的硬幣,朝上的概率不一定是1/2), every time he tosses the coin, the probab
2015ACM/ICPC亞洲區上海站【solved:4 / 12】
A是。抽空要寫掉的bronze-silver題!!! D是左偏樹並查集。以後有空再看吧。 -update:2017年10月25日14:59:07。 A - An Easy Physics Problem HDU - 5572(計算幾何) //先
【CF套題】Codeforces Round #524 (Div. 2) (1080A~F)
原題地址 迴歸 CF \text {CF} CF,這場堪堪上紫。 A.Petya and Origa
【CF套題】 Gym101623 NWERC2017
【前言】 在BZOJ上翻題看到了幾題,心血來潮就全寫了。 C這個搜尋我不是很會寫,直接看了別人的(然而還是沒寫) 然後這個J讓我知道一定不能在還要用值的時候刪掉一個指標。 【題目】 原題地址 A.Ascending Photo 單獨寫。 B.Boss Battle 顯
【CF套題】Good Bye 2018
【前言】 自閉了,四題以後就看著排名一直往下掉。 E想了個線段樹維護階梯,沒看wiki,出來才發現是公式題。 F想了個凸包,結果是個貪心。 心態炸裂(然而rk500還能漲分) 【題目】 原題地址 A.New Year and the Christmas Ornament 瞎搞
【CF套題】Educational Codeforces Round 57
【前言】 打了小號,做到心態爆炸,雖然最後過了6T。 然而十分後悔為什麼沒有用大號打,大號打就上橙了qwq。 【題目】 原題地址 A.Find Divisible 輸出 l
【CF套題】Codeforces Round #528 (Div. 1)
【前言】 並不能打div2的我十分絕望。 雖然上分了還是很高興。 【題目】 原題地址 A.Connect Three 將三個格子按 x
HDU 5976 Detachment 【貪心】 (2016ACM/ICPC亞洲區大連站)
Detachment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 570 Accepted
HDU1009_FatMouse' Trade【貪心】【水題】
clu string.h gin ins center multiple rate int which FatMouse‘ Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/