1. All X
1.1 基本思路
k和c的范围都不大,因此可以考虑迭代找循环节,然后求余数,判定是否相等。这题还是挺简单的。
1.2 代码

 /* 5690 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <bitset>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 typedef long long LL;
const int maxn = ;
int x;
LL m;
int c, k;
int visit[maxn]; int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t;
int tmp, ntmp;
LL i, cycle; scanf("%d", &t);
rep(tt, , t+) {
scanf("%d%I64d%d%d", &x,&m,&k,&c);
printf("Case #%d:\n", tt);
memset(visit, -, sizeof(visit));
ntmp = x % k;
cycle = -;
for (i=; i<=m; ++i) {
if (visit[tmp=ntmp] != -) {
cycle = i - visit[tmp];
break;
}
visit[tmp] = i;
ntmp = (*tmp + x) % k;
} if (cycle == -) {
puts(tmp==c ? "Yes":"No");
} else {
LL n = ((m - visit[tmp]) % cycle + cycle) % cycle;
for (i=; i<n; ++i)
tmp = (*tmp + x) % k;
puts(tmp==c ? "Yes":"No");
}
} #ifndef ONLINE_JUDGE
printf("time = %ldms.\n", clock());
#endif return ;
}

2. Sitting in Line
2.1 基本思路
N的范围很小,刚开始以为这是一个数学题,后来发现状态DP可解。
$dp[st][n]$st表示当前状态(即当前已经加入数字),n表示当前排列的最末端数字。显然有状态转移方程
\[
  dp[nst][k] = \max(dp[nst][k], dp[st|(1<<k)][j]+a_j \times a_k), \\
  \qquad \text{其中 } st\&(1<<k) == 0\text{ 并且 }pos_k==-1 || pos_k==getBits(st)
\]
2.2 代码

 /* 5691 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <bitset>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 typedef long long LL;
LL INF = 0x3f3f3f3f3f3f3f3f;
LL NEG_INF = 0xc0c0c0c0c0c0c0c0;
const int maxn = ;
LL dp[<<maxn][maxn];
int a[maxn], p[maxn];
int Bits[<<maxn];
int n; int getBits(int x) {
int ret = ; while (x) {
ret += x & ;
x >>= ;
} return ret;
} void init() {
const int mst = <<;
rep(i, , mst) Bits[i] = getBits(i);
} void solve() {
memset(dp, 0xC0, sizeof(dp));
rep(i, , n) {
if (p[i]==- || p[i]==)
dp[<<i][i] = ;
} const int mst = <<n;
#ifndef ONLINE_JUDGE
printf("NEG_INF = %I64d\n", NEG_INF);
#endif
rep(i, , mst) {
const int idx = Bits[i];
rep(j, , n) {
if (dp[i][j] == NEG_INF) continue;
rep(k, , n) {
if (i & (<<k)) continue;
if (p[k]==- || p[k]==idx) {
int nst = i | <<k;
dp[nst][k] = max(dp[nst][k], dp[i][j]+a[j]*a[k]);
}
}
}
} LL ans = NEG_INF;
rep(j, , n)
ans = max(ans, dp[mst-][j]);
printf("%I64d\n", ans);
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t; init();
scanf("%d", &t);
rep(tt, , t+) {
scanf("%d", &n);
rep(i, , n)
scanf("%d%d", &a[i],&p[i]);
printf("Case #%d:\n", tt);
solve();
} #ifndef ONLINE_JUDGE
printf("time = %ldms.\n", clock());
#endif return ;
}

3. Snacks
3.1 基本思路
这个题刚开始看以为是树链剖分,巨难无比,赛后发现就是个树形结构转线性结构,然后使用线段树维护最大值就好了,使用下lazy标记直接A了。
3.2 代码

 /* 5692 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <bitset>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 struct edge_t {
int v, nxt;
}; typedef long long LL;
const int maxn = 1e5+;
const int maxv = maxn;
const int maxe = maxn * ;
int head[maxv], l, cnt;
edge_t E[maxe];
LL mx[maxn<<], delta[maxn<<];
int L[maxn], R[maxn], a[maxn];
int LLL, RR, w;
int n, m; void init() {
memset(head, -, sizeof(head));
l = cnt = ;
memset(mx, , sizeof(mx));
memset(delta, , sizeof(delta));
} void addEdge(int u, int v) {
E[l].v = v;
E[l].nxt = head[u];
head[u] = l++; E[l].v = u;
E[l].nxt = head[v];
head[v] = l++;
} void dfs(int u, int fa) {
L[u] = ++cnt;
for (int k=head[u]; k!=-; k=E[k].nxt) {
const int& v = E[k].v;
if (v == fa) continue;
dfs(v, u);
}
R[u] = cnt;
} inline void PushDown(int rt) {
if (delta[rt]) {
int lb = rt<<, rb = lb | ;
delta[lb] += delta[rt];
delta[rb] += delta[rt];
mx[lb] += delta[rt];
mx[rb] += delta[rt];
delta[rt] = ;
}
} inline void PushUp(int rt) {
mx[rt] = max(mx[rt<<], mx[rt<<|]);
} void Update(int l, int r, int rt) {
if (LLL<=l && RR>=r) {
mx[rt] += w;
delta[rt] += w;
return ;
} PushDown(rt);
int mid = (l + r) >> ; if (RR <= mid) {
Update(lson);
} else if (LLL > mid) {
Update(rson);
} else {
Update(lson);
Update(rson);
} PushUp(rt);
} LL Query(int l, int r, int rt) {
if (LLL<=l && RR>=r) {
return mx[rt];
} PushDown(rt);
int mid = (l + r) >> ; if (RR <= mid)
return Query(lson);
else if (LLL > mid)
return Query(rson);
else
return max(Query(lson), Query(rson));
} void solve() {
dfs(, -); rep(i, , n) {
scanf("%d", &a[i]);
LLL = L[i];
RR = R[i];
w = a[i];
Update(, n, );
} int op, x, y;
LL ans; rep(i, , m) {
scanf("%d%d", &op, &x);
LLL = L[x];
RR = R[x];
if (op) {
ans = Query(, n, );
printf("%I64d\n", ans);
} else {
scanf("%d", &y);
y -= a[x];
w = y;
Update(, n, );
a[x] += y;
}
}
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t;
int u, v; scanf("%d", &t);
rep(tt, , t+) {
scanf("%d%d", &n,&m);
init();
rep(i, , n) {
scanf("%d%d", &u,&v);
addEdge(u, v);
}
printf("Case #%d:\n", tt);
solve();
} #ifndef ONLINE_JUDGE
printf("time = %ldms.\n", clock());
#endif return ;
}

4. D Game
4.1 基本思路
$n,m \in [1,300]$这数据范围很小,基本思路是DP.
不妨令$dp[i][j]$表示从第$i$个数字到第$j$个数字能否通过全部被删掉,$mx[i]$表示前$i$个数字中可以最多可以删掉的数字。显然有动态转移方程
\[
  mx[i] = \max(mx[i], mx[j-1]+i-j+1), \text{ if } dp[j][i]=True
\]
因此,紧急考虑$dp[j][i]$的情况即可:
(1) $dp[j][k] \& dp[k+1][i], k \in [j+1, i)$
(2) $dp[j+1][i-1], (a_i-a_j) \in D$
(3) $dp[j+1][k-1] \& dp[k+1][i-1], (a_i-a_j)/2 \in D, a_k*2 = a_i+a_j, k \in [j+1, i)$
4.2 代码

 /* 5693 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <bitset>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 const int maxn = ;
bool dp[maxn][maxn];
int mx[maxn];
int a[maxn];
int n, m;
sti st; void solve() {
memset(dp, , sizeof(dp)); rep(i, , n+) {
dp[i][i] = false;
dp[i][i-] = true;
per(j, , i) {
rep(k, j+, i)
dp[j][i] |= dp[j][k] & dp[k+][i];
if (st.count(a[i]-a[j])) {
dp[j][i] |= dp[j+][i-];
}
if ((a[i]-a[j])%== && st.count((a[i]-a[j])>>)) {
rep(k, j+, i) {
if (a[k]+a[k] == a[j]+a[i]) {
dp[j][i] |= dp[j+][k-] & dp[k+][i-];
}
}
}
}
} mx[] = ;
rep(i, , n+) {
mx[i] = mx[i-];
rep(j, , i) {
if (dp[j][i])
mx[i] = max(mx[i], mx[j-]+i-j+);
}
} printf("%d\n", mx[n]);
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t;
int x; scanf("%d", &t);
while (t--) {
scanf("%d%d", &n,&m);
rep(i, , n+) scanf("%d", a+i);
st.clr();
rep(i, , m) {
scanf("%d", &x);
st.insert(x);
}
solve();
} #ifndef ONLINE_JUDGE
printf("time = %ldms.\n", clock());
#endif return ;
}

5. BD String
5.1 基本思路
不妨令$f(n)$表示$S(n)$字符串的长度,显然很容易得到$f(n) = 2^n-1$。因此,最终串的长度为$f(2^{1000}) = 2^{1001}-1$,而$L,R \in [1,10^{18}]$。
显然原问题等价于计算$S(60)$的$[L,R]$范围内的B的个数。
算法很简单,就是个递归。可以考虑$S(k)$的左半部分和右半部分,递归时,加上剪枝$R-L+1==f(dep)$即可,此时B的数量为$f(dep-1)$,D的数量为$f(dep-1)-1$。
5.2 代码

 /* 5694 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <bitset>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 typedef long long LL;
LL Base[];
LL L, R; void init() {
rep(i, , )
Base[i] = 1LL << i;
} LL dfsD(LL, LL, int);
LL dfsB(LL, LL, int); LL dfsD(LL L, LL R, int dep) {
if (L > R) return ;
if (dep == ) return ;
if (dep == ) return ; if (R-L+ == Base[dep]-) {
return Base[dep-]-;
}
LL mid = Base[dep-];
if (R < mid) {
return dfsD(L, R, dep-);
} else if (L > mid) {
LL nxtL = mid - - (R - mid) + ;
LL nxtR = mid - - (L - mid) + ;
return dfsB(nxtL, nxtR, dep-); } else {
LL lret = dfsD(L, mid-, dep-);
LL rret = ; if (R > mid) {
LL nxtL = mid- - (R-mid) + ;
LL nxtR = mid-;
rret = dfsB(nxtL, nxtR, dep-);
} return lret + rret;
}
} LL dfsB(LL L, LL R, int dep) {
if (L > R) return ;
if (dep == ) return ;
if (dep == ) return ; if (R-L+ == Base[dep]-) {
return Base[dep-];
}
LL mid = Base[dep-];
if (R < mid) {
return dfsB(L, R, dep-); } else if (L > mid) {
LL nxtL = mid - - (R - mid) + ;
LL nxtR = mid - - (L - mid) + ;
return dfsD(nxtL, nxtR, dep-); } else {
LL lret = dfsB(L, mid-, dep-);
LL rret = ; if (R > mid) {
LL nxtL = mid- - (R-mid) + ;
LL nxtR = mid-;
rret = dfsD(nxtL, nxtR, dep-);
} return lret + + rret;
}
} void solve() {
LL ans = dfsB(L, R, ); printf("%I64d\n", ans);
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t; init();
scanf("%d", &t);
while (t--) {
scanf("%I64d%I64d", &L, &R);
solve();
} #ifndef ONLINE_JUDGE
printf("time = %ldms.\n", clock());
#endif return ;
}

6. Gym Class
6.1 基本思路
水题,根据依赖性建图,然后拓扑排序就好了。注意拓扑的时候使用优先队列可求最值。
6.2 代码

 /*  */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <bitset>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 struct edge_t {
int v, nxt;
}; typedef long long LL;
const int maxn = 1e5+;
const int maxv = maxn;
const int maxe = maxn;
int head[maxv], l;
edge_t E[maxe];
int deg[maxv];
bool visit[maxv];
int n, m; void init() {
memset(head, -, sizeof(head));
memset(deg, , sizeof(deg));
memset(visit, false, sizeof(visit));
l = ;
} inline void addEdge(int u, int v) {
++deg[v];
E[l].v = v;
E[l].nxt = head[u];
head[u] = l++;
} void solve() {
priority_queue<int> Q;
LL ans = ;
int u, v, k, mn = INT_MAX; rep(i, , n+) {
if (deg[i] == ) {
Q.push(i);
visit[i] = true;
}
} while (!Q.empty()) {
u = Q.top();
Q.pop();
mn = min(u, mn);
ans += mn;
for (k=head[u]; k!=-; k=E[k].nxt) {
v = E[k].v;
if (!visit[v] && --deg[v]==) {
Q.push(v);
visit[v] = true;
}
}
} printf("%I64d\n", ans);
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t;
int u, v; scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &m);
init();
rep(i, , m) {
scanf("%d%d", &u,&v);
addEdge(u, v);
}
solve();
} #ifndef ONLINE_JUDGE
printf("time = %ldms.\n", clock());
#endif return ;
}

【AStar】初赛第一场的更多相关文章

  1. # 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)

    「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程) 题链 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环 ...

  2. 计蒜之道 初赛第一场B 阿里天池的新任务(简单)

    阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 首先,定义一个序列 ww: \displ ...

  3. 编程之美2015初赛第一场 hihoCoder #1156 : 彩色的树(染色问题)

    #1156 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, , …, n.树中有n - 1条边,任意两个节点间恰好有一条 ...

  4. 2015编程之美 初赛第一场C题 质数相关 二分图的最大匹配

    质数相关 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/msbop2015round2a/prob ...

  5. 2017 计蒜之道 初赛 第一场 A、B题

    A题 阿里的新游戏 题目概述: 阿里九游开放平台近日上架了一款新的益智类游戏——成三棋.成三棋是我国非常古老的一个双人棋类游戏,其棋盘如下图所示: 成三棋的棋盘上有很多条线段,只能在线段交叉点上放入棋 ...

  6. hihocoder 微软编程之美2015 初赛 第一场 (树算法 + 暴力思想 + 搜索思想)

    题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...

  7. 2015 编程之美初赛第一场 AC题

    题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...

  8. 2018 计蒜之道-初赛 第一场 A-百度无人车

    百度一共制造了 nn 辆无人车,其中第 ii 辆车的重量为 a_i\ \mathrm{kg}ai​ kg. 由于车辆过重会增大轮胎的磨损程度,现在要给这 nn 辆车减轻重量.每将一辆车减轻 1\ \m ...

  9. 2013腾讯编程马拉松初赛第一场(3月21日) 湫湫系列故事——减肥记II ----线段树

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4509 虽然制定了减肥食谱,但是湫湫显然克制不住吃货的本能,根本没有按照食谱行动! 于是,结果显而易见… 但 ...

随机推荐

  1. poj 1113 Wall

    题目链接:http://poj.org/problem?id=1113 题目大意:给出点集和一个长度L,要求用最短长度的围墙把所有点集围住,并且围墙每一处距离所有点的距离最少为L,求围墙的长度. 解法 ...

  2. [noip2005提高]过河 dp

    由于L的范围到了109,用普通dp做肯定是不成了: 可以观察到M的数量很小,dp在转移的过程中有大量的无用转移: 可以想到压缩范围,问题是如何压缩,观察若S=9,T=10时,能到达的点,9,10,18 ...

  3. [转]日期格式化(yyyy-MM-dd)中,为什么 M 多大写?

    最近犯了个可傻逼的错误,格式化年月日的时候不小心将yyyy-MM-dd写成YYYY-MM-dd,导致格式化结果中年不正确. 看看知乎上的说法 问题: http://www.zhihu.com/ques ...

  4. jquery的ajax同步和异步的理解及示例

    之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去 ...

  5. javascript设计模式-抽象工厂模式

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. BZOJ1502: [NOI2005]月下柠檬树

    Simpson法相当好用啊!神奇的骗分算法! /************************************************************** Problem: 1502 ...

  7. Java获取最后插入MySQL记录的自增ID值方法

    方法一: String sql = "INSERT INTO users (username,password,email) VALUES (?,?,?);"; PreparedS ...

  8. ExtJs之进度条实现

    慢慢按书上的作. <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta h ...

  9. hdu 4745 Two Rabbits

    思路:求最长回文子串的长度!代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #incl ...

  10. BZOJ 1143 1143: [CTSC2008]祭祀river 最长反链

    1143: [CTSC2008]祭祀river Description 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动. ...