題目鏈結 problems
hdoj上的題目順序可能和現場比賽的題目順序不一樣,
我這裡的是按照hdoj的題目順序來寫的。
problem 1001
簽到
#include using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)
typedef long long ll;
ll n, f[31];
int ans;
int main()
while (~scanf("%lld", &n))
return 0;
}
problem 1002
這道題的話,其實乙個點上是可以有多種顏色的
因為最多只有51種顏色,所以我們維護51棵線段樹即可。
我們對y座標建立線段樹,對於每個y,我們只需要知道最小的x在**即可。
因為他的詢問的x座標下界總是1,那麼我們只要看看y1到y2的最小值是否小於等於給定的x即可。
詢問的時候做51次子詢問就可以了。
#include using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
typedef long long ll;
const int n = 2e6 + 10;
int x, c, d, x, y, op, ans, ret, cnt;
int root[53];
int l[n], r[n], v[n];
void update(int &i, int l, int r, int x, int val)
v[i] = min(v[i], val);
if (l == r) return;
int mid = (l + r) >> 1;
if (x <= mid) update(l[i], l, mid, x, val);
else update(r[i], mid + 1, r, x, val);
}void query(int i, int l, int r)
int mid = (l + r) >> 1;
if (c <= mid) query(l[i], l, mid);
if (d > mid) query(r[i], mid + 1, r);
} int main()
if (op == 1)
if (op == 2)
printf("%d\n", ans);
} }return 0;
}
problem 1003
我們對於每一條邊,找到所有包含這條邊的三元環,個數計為x
然後這對答案的貢獻就是$c_^$
判斷兩點之間是否有邊的時候要手寫雜湊才能過
#include const int n = 2e5 + 10;#define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
namespace hashmap
inline void add(int _u, int _v)
inline bool query(int _u, int _v)
}using namespace std;
using namespace hashmap;
typedef long long ll;
vectora[n];
struct ss e[n];
int n, m;
int main()
ll ans = 0;
rep(i, 1, m)
printf("%lld\n", ans);
} return 0;
}
problem 1004
這題規律找了半天……
$f[n] = f[n - 1] + 5f[n - 2] + f[n - 3] - f[n - 4]$
然後矩陣加速下就可以了
#include using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define mp make_pair
#define fi first
#define se second
typedef long long ll;
const ll mod = 1e9 + 7;
struct matrix f, unit, a;
ll m, k;
int n;
matrix add(matrix a, matrix b)
return c;
}matrix mul(matrix a, matrix b)
return c;
}matrix pow(matrix a, ll k)
int main()
if (m == 2ll)
if (m == 3ll)
if (m == 4ll)
if (m == 5ll)
k = m - 4;
matrix b = pow(f, k);
matrix c = mul(b, a);
printf("%lld\n", c.arr[1][1]);
} return 0;
}
problem 1010
這道題的話先轉dfs序,然後求出以每個點為根的子樹的對應區間,
於是就轉化成了求區間裡選乙個數和x異或後的最大值。
可持久化trie即可。
#include using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
typedef long long ll;
const int n = 1e5 + 10;
const int m = 1e7 + 10;
int n, m, tot = 0;
int rt[n], id[m], t[m][2];
int l, r, x;
int a[n], c[n], l[n], r[n], g[n];
int ti;
int u;
vector v[n];
inline void insert(int pre, int x, int k)
}inline int query(int l, int r, int x)
return ans;
}void dfs(int x)
r[x] = ti;
}int main()
dfs(1);
id[0] = -1;
insert(0, 0, 0);
rep(i, 1, n) insert(rt[i - 1], g[i], i);
rep(i, 1, m)
} return 0;
}
2017ACM ICPC廣西邀請賽
c counting stars 無向圖求三元環 這裡需要一些小小的改動 題目中要求的a結構其實是兩個具有一條公共邊的三元環 求這樣的個數 根據演算法我們一開始就是先列舉一條邊,這樣我們就以第一條邊為公共邊,找出三元環的個數,然後從這n個中選2個即可,也就是sum sum 1 2 include i...
2017 ACM ICPC 西安邀請賽總結
在這個月20號,我和隊友自費去了西安參加邀請賽,本想著就算拿不了好成績也不至於太差了,然而事實總是出乎意料,讓我打出了第一次參加 acm 的感覺 想起一年前第一次參加 acm,簡直了,讓我懷疑人生,一開始自信心滿滿,可是賽後卻心灰意冷 為此,比賽後一直到現在我都沒有調整過來心態,心態太 了,一度懷疑...
2017ACM ICPC北京賽區
有n只貓,和m條魚,第i只貓吃掉一條魚所花的時間為c i 乙隻貓,吃完乙個會繼續吃 如果還有的話 問在x時刻後有多少條魚留下 分別輸出完整的和不完整的 分析 暴力for一遍,trick 給每只貓設定乙個標記表示i秒的時候,它吃的魚還剩多少,這樣方便統計,便於模擬啊 include define ll...