【套題】Codeforces#321 div2
A - Kefa and First Steps
- 簡單
dp
/* **********************************************
File Name: a.cpp
Auther: [email protected]
Created Time: 2015/9/23 星期三 上午 12:31:29
*********************************************** */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int MAX = 100007;
int a[MAX];
int dp[MAX];
int main() {
int n;
while (~scanf(" %d", &n)) {
memset(dp, 0, sizeof(dp));
a[0] = 0;
for (int i = 1; i <= n; ++i) {
scanf(" %d", a + i);
}
int ans = 1;
for (int i = 1; i <= n; ++i) {
if (a[i] >= a[i - 1]) {
dp[i] = dp[i - 1] + 1;
if (dp[i] > ans) {
ans = dp[i];
}
} else {
dp[i] = 1;
}
}
printf("%d\n", ans);
}
return 0;
}
B - Kefa and Company
- 可以
O(n∗logn) 地做。當然,本題可以做到O(n) 。
/* **********************************************
File Name: b.cpp
Auther: [email protected]
Created Time: 2015/9/23 星期三 上午 12:37:27
*********************************************** */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
#ifdef ONLINE_JUDGE
#define lld I64d
#endif
const int MAX = 100007;
struct Node {
int m;
int s;
bool operator<(const Node& b)const {
return m < b.m;
}
} a[MAX];
ll sum[MAX];
bool operator<(const ll& b, const Node& a) {
return b < a.m;
}
bool operator<(const Node& a, const ll& b) {
return a.m < b;
}
int main() {
int n, d;
while (~scanf(" %d %d", &n, &d)) {
for (int i = 0; i < n; ++i) {
scanf(" %d %d", &a[i].m, &a[i].s);
}
sort(a, a + n);
sum[0] = a[0].s;
for (int i = 1; i < n; ++i) {
sum[i] = sum[i - 1] + a[i].s;
}
ll ans = 0LL;
for (int i = 0; i < n; ++i) {
ans = max(ans, sum[lower_bound(a, a + n, a[i].m + d) - a - 1] - sum[i] + a[i].s);
}
cout << ans << endl;
//printf("%lld\n", ans);
}
return 0;
}
C - Kefa and Park
- 簡單
dfs 一遍即可
/* **********************************************
File Name: c.cpp
Auther: [email protected]
Created Time: 2015/9/23 星期三 上午 1:07:17
*********************************************** */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int MAX = 100007;
vector<int> G[MAX];
int cat[MAX];
bool vis[MAX];
bool is_leaf[MAX];
bool ok[MAX];
int n, m;
void dfs(int u, int now, int his) {
vis[u] = true;
if (cat[u] == 1) {
++now;
} else {
now = 0;
}
if (now > his) his = now;
ok[u] = his <= m;
//printf("ok[%d] = %s\n", u, ok[u] ? "true" : "false");
int son = 0;
for (auto it: G[u]) {
if (vis[it]) continue;
dfs(it, now, his);
son++;
}
if (son == 0) {
is_leaf[u] = true;
}
}
int main() {
while (~scanf(" %d %d", &n, &m)) {
for (int i = 1; i <= n; ++i) {
scanf(" %d", cat + i);
G[i].clear();
}
int u, v;
for (int i = 1; i < n; ++i) {
scanf(" %d %d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
memset(vis, false, sizeof(vis));
memset(ok, false, sizeof(ok));
memset(is_leaf, false, sizeof(is_leaf));
dfs(1, 0, 0);
int sum = 0;
for (int i = 1; i <= n; ++i) {
if (is_leaf[i] && ok[i]) {
++sum;
}
}
printf("%d\n", sum);
}
return 0;
}
相關推薦
【套題】Codeforces#321 div2
A - Kefa and First Steps 簡單dp /* ********************************************** File Name: a
【CF套題】Codeforces Round #524 (Div. 2) (1080A~F)
原題地址 迴歸 CF \text {CF} CF,這場堪堪上紫。 A.Petya and Origa
【CF套題】Codeforces Round #528 (Div. 1)
【前言】 並不能打div2的我十分絕望。 雖然上分了還是很高興。 【題目】 原題地址 A.Connect Three 將三個格子按 x
【做題】Codeforces Round #453 (Div. 1) D. Weighting a Tree——拆環
每一個 int 會有 while sig 實現 dex -s 怎麽辦 前言:結論題似乎是我的硬傷…… 題意是給你一個無向圖,已知連接到每一個點的邊的權值和(為整數,且屬於區間[-n,n]),需要求出每條邊權值的一個合法解(都要是在區間[-2*n^2,2*n^2]內的整數)。
【雜題】[CodeForces 1076G] Array Game【資料結構】【博弈】
原題連結:http://codeforces.com/problemset/problem/1076/G Description 考慮這樣一個博弈 你有一個序列B,一開始有一個棋子在B的第一個位置。 雙方輪流操作,第一次操作前將B[1]-1 遊戲有一個引數m,操作以下面的形式進行
【互動題】Codeforces 1019B The hat
分析: 非常簡單的互動題,二分答案的左端點位置(在[1,n/2]中) 由於每兩個相鄰的點值都相差1,所以可以把詢問的值看作一個由-1或1組成的序列的字首和。 答案就是要求兩個字首和相差為0,長度為n/2的區間。 所以二分的時候,如果當前區間的左端點值(即
【套題】2015ACM/ICPC亞洲區長春站 HDU5532 5533 5534 5536 5538
水幾個題,熟悉一下鍵盤。。。 HDU5532AlmostSortedArray 題意:ASA定義為,僅去掉一個(OneandOnlyOne)元素後陣列是非降序或者非升序。 題解:很明顯,判斷一個序列是否有序可以通過判斷其LongestNonDecreasing
【CF套題】Educational Codeforces Round 57
【前言】 打了小號,做到心態爆炸,雖然最後過了6T。 然而十分後悔為什麼沒有用大號打,大號打就上橙了qwq。 【題目】 原題地址 A.Find Divisible 輸出 l
Codeforces 637A Voting for Photos 【水題】
http://codeforces.com/problemset/problem/637/A A. Voting for Photos time limit per test 1 second memory limit per test 256 megabytes inp
【codeforces 981E. Addition on Segments】【線段樹】【bitset 01揹包的妙用優化】【好題】【操作集區間的最大值能否構成】
【連結】 http://codeforces.com/contest/981/problem/E 【題意】 給定q個區間加的操作,求出這q個操作的所有子集的所有最大值,在[1,n]的範圍內 【分析】 要知道一個數能否可由某個操作集得到,只要知道對於某個
CodeForces 1072C Cram Time【思維題】
傳送門:http://codeforces.com/problemset/problem/1072/C C. Cram Time time limit per test 1 second memory limit per test 256 megabytes input
Codeforces Round #515 (Div. 3)A. Vova and Train【水題】
A. Vova and Train time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Vova
CodeForces - 110A Y - Nearly Lucky Number【水題】
Y - Nearly Lucky Number Petya loves lucky numbers. We all know that lucky numbers are the positive integers whose decimal representations contai
CodeForces - 118A String Task【水題】
118A String Task time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Petya started to atte
CodeForces - 266A Stones on the Table【水題】
Stones on the Table time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output There are n ston
Codeforces Round#519 D. Mysterious Crime【想法題】
【題意】:給你m個長度為n的排列,m<=10,n<=100000,讓你求有多少種不同的公共子串。 【題解】:就目前而言,如果是在多個字串中求不同的公共子串個數,還不是一個能在較低複雜度下就能解決的問題,所以這道題一定是有它自己特殊的地方:排列(permutaio
【Codeforces Round #507 (Div. 2)】【互動題】【二分預測】Subway Pursuit【火車預測】
Description: This is an interactive problem. In the Wonderful Metropolis of the Future, there is no need in subway train drivers. Due to
【Codeforces Round 332 (Div 2)A】【水題】A. Patrick and Shopping 遍歷三元環的最小成本
Today Patrick waits for a visit from his friend Spongebob. To prepare for the visit, Patrick needs to buy some goodies in two stores located near his hous
【思維題】【貪心】【模擬】【CodeForces】794 C Naming Company
【題意】 兩個人A和B在玩一個填字母遊戲。現在A和B都有一個包含 n 個小寫字母的多重集合(可以有重複字元)。 初始有一個長度為n的空字串s,兩人輪流操作,A先手。一次操作可以將自己集合中的一個字母拿出來,放到字串s的某個空位置,然後把這個字母從自己集合中刪除(如果
【codeforces 981E. Addition on Segments】【線段樹】【bitset 01揹包的妙用優化】【好題】【操作集區間的最大值能否構成】
【連結】 【題意】 給定q個區間加的操作,求出這q個操作的所有子集的所有最大值,在[1,n]的範圍內 【分析】 要知道一個數能否可由某個操作集得到,只要知道對於某個位置上的數的操作中能否構成這個數(好像口胡了)。 對於一個數,我們可以知道能對它進行的