以下所有AC题解程序来自“仙客传奇”团队。 AC题数:7/13 ABCFGJL

A. Traversal

AC的C++语言程序:

#include <bits/stdc++.h>
#define lo(i, n, m) for (int i = n; i < m; i++)
#define loe(i, n, m) for (int i = n; i <= m; i++)
#define rlo(i, n, m) for (int i = n - 1; i >= m; i--)
#define rloe(i, n, m) for (int i = n; i >= m; i--)
#define scd(x) scanf("%d", &x)
#define clr(a, b) memset((a), (b), sizeof(a))
using namespace std;const int LIM = 110;
const int MOD = 10007;
int dp[2][531441];    // 531441 is pow(3, 12)
int inval[LIM];
int state[LIM], dir[3] = {1};
int ts = 0;
int T, n, p, k, t, len, lim;// state compressing
inline int code() {int ret = 0;lo(i, 0, len) ret = ret * 3 + state[i];return ret;
}// state decompressing
inline void rcode(int cd) {rlo(i, len, 0) state[i] = cd % 3, cd /= 3;
}// erase the state of (i-p-2)th point which is useless for point (i + 1)
inline void evolution() {rlo(i, len, 1) state[i] = state[i - 1];state[0] = 0;
}int main() {scd(T);loe(_, 1, T) {++ts;scd(n), scd(p), scd(k);dir[1] = p, dir[2] = p + 2;lo(i, 0, k) scd(t), inval[t] = ts;len = p + 3;lo(i, 0, len) state[i] = 2;int _pos = 0;clr(dp[_pos], 0);dp[_pos][lim = code()] = 1;lo(i, 0, n) {clr(dp[1 - _pos], 0);loe(j, 0, lim) {if (!dp[_pos][j]) continue;rcode(j);evolution();if (inval[i + 1] == ts) {// if i + 1 is the invalid pointstate[0] = 2;if (state[p + 2] == 2) t = code(), dp[1 - _pos][t] = (dp[1 - _pos][t] + dp[_pos][j]) % MOD;} else {// if i + 1 is an exist point// try to create no edgestate[0] = 0;if (state[p + 2] == 2) t = code(), dp[1 - _pos][t] = (dp[1 - _pos][t] + dp[_pos][j]) % MOD;// try to create one edgesstate[0] = 1;lo(k, 0, 3) {if (state[dir[k]] == 2) continue;++state[dir[k]];if (state[p + 2] == 2) t = code(), dp[1 - _pos][t] = (dp[1 - _pos][t] + dp[_pos][j]) % MOD;--state[dir[k]];}// try to create two edgesstate[0] = 2;lo(k, 0, 2) lo(w, k + 1, 3) {if (state[dir[k]] == 2 || state[dir[w]] == 2) continue;++state[dir[k]], ++state[dir[w]];if (state[p + 2] == 2) t = code(), dp[1 - _pos][t] = (dp[1 - _pos][t] + dp[_pos][j]) % MOD;--state[dir[k]], --state[dir[w]];}}}_pos = 1 - _pos;}printf("Case #%d: %d\n", _, dp[_pos][lim]);}return 0;
}
// 参考了:https://blog.csdn.net/johsnows/article/details/77511974
// 定义集合S的元素为二元组(x, y),其中x表示公园的标识,y表示这个点的度
// (之后将使用dp(i, S)来表示一个状态)
// 显然最后构成的结果要求所有点的度都是2
// 对于每个点i的度数,仅有与它距离为1、p、p + 2的点的度数与它相关,
// 如果把相关性的控制放在标识较大的点上,即点i仅影响与i - 1、i - p、i - p - 2点的度数,
// 相应地,i + 1、i + p、i + p + 2来控制对i点度数的影响。
// 对于点i,使用集合S来存储从i - p - 2到i点的度数,考虑点i + 1,
// 对于i + 1,集合S应当去掉i + 1 - p - 3这个点(因为点i + 1不会影响到这个点的度数,且对之后的点也没有影响)
// 相应地添加上i + 1这个点,此时S调整成对应到i + 1这个点的S,
// 先忽略题目中关于无效点的描述,则对于i + 1这个点它有三种选择:
// 暂时不进行连边、添加1条边、添加2条边,(特别地,应当约束一下添加上边后没有点的度数会超过2)。
// 这样就可以完成dp计数,接着考虑添加上无效的点。
// 对于无效的点,不进行连边,但是假设它的度数为2(防止因为它的缘故被漏记一些合法情况)。

题解链接:
hdu 5450 Traversal(状压dp)
hdu 5450 Traversal(状压dp)

B. Best Solver
AC的C++语言程序:

#include <bits/stdc++.h>
using namespace std;const int MAXN = 1e7 + 2;typedef long long ll;
ll x , m;
ll f[MAXN + 3], p, emmm[MAXN + 3];ll pow(ll x , ll n, ll mo) {if (n == 0) return 1;ll t = pow(x , n/2, mo);if (n & 1) return t * t % mo * x % mo;else return t * t % mo;
}int main() {int T;scanf("%d", &T);memset(emmm, -1, sizeof(emmm));for (int cas = 1; cas <= T; cas++) {scanf("%lld%lld", &x, &m);f[0] = 2 % m;f[1] = 10 % m;if (emmm[m] == -1) {for (int i = 2;; i++) {f[i] = (f[i-1] * 10 % m- f[i -2] % m + m) % m;if (f[i] == f[1] && f[i-1] == f[0]) {p = i - 1;break;}}emmm[m] = p;//cout << "HERE" << endl;}p = emmm[m];ll r = ((pow(2, x, p) + 1) %p + p) %p;f[0] = 2 % m;f[1] = 10 % m;for (int i = 2; i <= r; i++) {f[i] = (f[i-1] * 10 % m- f[i -2] % m + m) % m;}//cout << "HERE" << endl;ll ans =( (f[r] - 1) % m + m ) % m;printf("Case #%d: %lld\n", cas, ans );}
}

C. Minimum Cut
AC的C++语言程序:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e4 + 2;
const int MAXM = 2e5 + 2;
int dutr[MAXN] , dug[MAXN];
const int INF  =0x3f3f3f3f;
int ans;
int main() {int T;scanf("%d", &T);for (int cas = 1; cas <= T; cas++){memset(dutr, 0, sizeof(dutr));memset(dug, 0, sizeof(dug));int n , m;scanf("%d%d", &n, &m);for (int i = 0; i < n - 1;i++){int u ,v;scanf("%d%d", &u,&v);dutr[u]++;dutr[v]++;}for (int i =0; i < m- n+1;i++){int u, v;scanf("%d%d", &u,&v);dug[u]++;dug[v]++;}ans = INF;for (int i = 1; i <= n;i++){if (dutr[i] == 1){ans = min(ans, dug[i] + 1);}}printf("Case #%d: %d\n",cas, ans);}return 0;
}

AC的C++语言程序:

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <set>
#include <map>
#define lo(i, n, m) for (int i = n; i < m; i++)
#define loe(i, n, m) for (int i = n; i <= m; i++)
#define rlo(i, n, m) for (int i = n - 1; i >= m; i--)
#define rloe(i, n, m) for (int i = n; i >= m; i--)
#define pb push_back
#define mk make_pair
#define clr(a, b) memset((a), (b), sizeof(a))
typedef long long LL;
using namespace std;
// const int INF = 0x3f3f3f3f;
const int INF = 0x7fffffff;
// const LL INF = 0x3f3f3f3f3f3f3f3f;
// const LL INF = 0x7fffffffffffffff;
const int NIL = -1;
template <class T>
inline T mx(T a, T b) {return a > b ? a : b;}
template <class T>
inline T mi(T a, T b) {return a < b ? a : b;}
template <class T>
inline void sw(T &a, T &b) {T t = a; a = b; b = t;
}
template <class T>
inline T mabs(T x) {return x < 0 ? -x : x;}
inline char gc() {char ret;while ((ret = getchar()) == ' ' || ret == '\n' || ret == '\t');return ret;
}
const int LIM = 2e4 + 10;
int deg1[LIM], deg2[LIM];int main() {// ios::sync_with_stdio(false);// cin.tie(NULL), cout.tie(NULL);int t, n, m, u, v;scanf("%d", &t);loe(k, 1, t) {scanf("%d%d", &n, &m);clr(deg1, 0), clr(deg2, 0);lo(i, 1, n) scanf("%d%d", &u, &v), deg1[u]++, deg1[v]++;loe(i, n, m) scanf("%d%d", &u, &v), deg2[u]++, deg2[v]++;int ans = INF;loe(i, 1, n) if (deg1[i] == 1) ans = mi(ans, 1 + deg2[i]);printf("Case #%d: %d\n", k, ans);}return 0;
}

D. Dividing This Product
题解链接:
hdu 5453 Dividing This Product(分块打表)

E. Excited Database
题解链接:
HDU 5454 Excited Database (2015年沈阳赛区网络赛E题)
HDU 5454 Excited Database【线段树】
hdu 5454 Excited Database(线段树)

F. Fang Fang
AC的C++语言程序:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<ctime>
#include<ctype.h>
#include<stdlib.h>
#include<bitset>
#include<algorithm>
#include<numeric> //accumulate
#define endl "\n"
#define fi first
#define se second
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define mem(a,b) memset(a,b,sizeof(a))
#define rush() int T;scanf("%d",&T);while(T--)
using namespace std;
const int maxn=2000000+5;
int n;
char s[maxn];
int check()
{int pos=0;while(s[pos]=='f')pos++;int st=pos;while(pos--){s[n++]='f';}int ans=0;for(int i=st; i<n; i++){if(s[i]=='f'){int j=i+1;while(j<n&&s[i]==s[j])j++;ans+=(j-i)/2;if((j-i)&1)ans++;i=j-1;}else if(s[i]=='c'){int j=i+1;if(s[j]!='f')return -1;while(j<n&&s[i+1]==s[j])j++;if(j-i<3)return -1;ans++;i=j-1;}elsereturn -1;}return ans;
}
int main()
{//cin.tie(0);//cout.tie(0);//ios_base::sync_with_stdio(false);//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int cas=0;rush(){scanf(" %s",s);int cnt=0;n=strlen(s);printf("Case #%d: %d\n",++cas,check());}return 0;
}/*
int read()
{char c = getchar();int x = 0;for (; (c < 48 || c>57); c = getchar());for (; c > 47 && c < 58; c = getchar()){x = (x << 1) + (x << 3) + c - 48;}return x;
}
*/

AC的C++语言程序:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
char a[MAXN];
int cntf, ans;
int main() {int n;cin >> n;getchar();for (int i = 0; i< n;i++){printf("Case #%d: ", i + 1);gets(a);int flag1 = 1;for (int j = 0; j < strlen(a); j++)if (a[j] != 'c' && a[j] != 'f'){puts("-1");flag1 = 0;break;}if (!flag1) continue;int j= 0;while (a[j] == 'f' && j < strlen(a)) j++;if (j == strlen(a) && a[j-1] != 'c') {printf("%d\n", strlen(a) / 2 + strlen(a) % 2);continue;}int pos = j, flag = 1;j++;if (j == strlen(a)) j = 0;cntf = 0;ans = 0;while (j != pos){if (a[j] == 'c'){if (cntf < 2) {flag = 0; break;}else ans++;cntf = 0;}else cntf++;j++;if (j == strlen(a)) j = 0;}if (cntf >= 2) ans++;else flag = 0;if (flag) printf("%d\n", ans);else printf("-1\n");}return 0;
}

AC的C++语言程序:

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <set>
#include <map>
#define lo(i, n, m) for (int i = n; i < m; i++)
#define loe(i, n, m) for (int i = n; i <= m; i++)
#define rlo(i, n, m) for (int i = n - 1; i >= m; i--)
#define rloe(i, n, m) for (int i = n; i >= m; i--)
#define pb push_back
#define mk make_pair
#define clr(a, b) memset((a), (b), sizeof(a))
typedef long long LL;
using namespace std;
// const int INF = 0x3f3f3f3f;
// const int INF = 0x7fffffff;
// const LL INF = 0x3f3f3f3f3f3f3f3f;
// const LL INF = 0x7fffffffffffffff;
const int NIL = -1;
template <class T>
inline T mx(T a, T b) {return a > b ? a : b;}
template <class T>
inline T mi(T a, T b) {return a < b ? a : b;}
template <class T>
inline void sw(T &a, T &b) {T t = a; a = b; b = t;
}
template <class T>
inline T mabs(T x) {return x < 0 ? -x : x;}
inline char gc() {char ret;while ((ret = getchar()) == ' ' || ret == '\n' || ret == '\t');return ret;
}const int LIM = 1e6 + 10;
char str[LIM];int main() {// ios::sync_with_stdio(false);// cin.tie(NULL), cout.tie(NULL);int n;scanf("%d", &n);getchar();loe(k, 1, n) {// scanf("%s", str);gets(str);int len = strlen(str);if (!len) {printf("Case #%d: ", k);printf("0\n");continue;}bool flag = true;lo(i, 0, len) if (str[i] != 'c' && str[i] != 'f') {flag = false; break;}if (!flag) {printf("Case #%d: ", k);printf("-1\n");continue;}flag = true;lo(i, 0, len) if (str[i] == 'c') {flag = false; break;}printf("Case #%d: ", k);if (flag) {printf("%d\n", len / 2 + len % 2);} else {flag = true;int cnt = 0;int cur = 0, ans = 0;lo(i, 0, len) if (str[i] == 'c') {cur = i; break;}cur = (cur + 1) % len;lo(i, 0, len) {if (str[cur] == 'c') {if (cnt < 2) {flag = false;break;}cnt = 0;ans++;} else if (str[cur] == 'f') {cnt++;}cur++;if (cur >= len) cur -= len;}// cout << flag << endl;printf("%d\n", flag ? ans : -1);}}return 0;
}

G. Matches Puzzle Game
AC的C++语言程序:

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <set>
#include <map>
#define lo(i, n, m) for (int i = n; i < m; i++)
#define loe(i, n, m) for (int i = n; i <= m; i++)
#define rlo(i, n, m) for (int i = n - 1; i >= m; i--)
#define rloe(i, n, m) for (int i = n; i >= m; i--)
#define pb push_back
#define mk make_pair
#define clr(a, b) memset((a), (b), sizeof(a))
typedef long long LL;
using namespace std;
// const int INF = 0x3f3f3f3f;
// const int INF = 0x7fffffff;
// const LL INF = 0x3f3f3f3f3f3f3f3f;
// const LL INF = 0x7fffffffffffffff;
const int NIL = -1;
template <class T>
inline T mx(T a, T b) {return a > b ? a : b;}
template <class T>
inline T mi(T a, T b) {return a < b ? a : b;}
template <class T>
inline void sw(T &a, T &b) {T t = a; a = b; b = t;
}
template <class T>
inline T mabs(T x) {return x < 0 ? -x : x;}
inline char gc() {char ret;while ((ret = getchar()) == ' ' || ret == '\n' || ret == '\t');return ret;
}
typedef unsigned int UI;
const int LIM = 510;
int mod;
int cost[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
UI dp[LIM][2][2][2];
bool vis[LIM][2][2][2];UI dfs(int r, int bv, int cv, int cr) {if (r < 0) return 0;if (r == 0 && (!cv || !bv)) return 0;if (vis[r][bv][cv][cr]) return dp[r][bv][cv][cr];UI &t = dp[r][bv][cv][cr];t = 0;if (bv && cv) {if (!cr && !r) return t = 1;else if (cr && r == 2) return t = 1;return t = 0;} else if (bv && !cv) {loe(i, 0, 9) {int sum = i + cr;int dig = sum % 10;if (i) t = (t + dfs(r - cost[dig] - cost[i], bv, 1, sum / 10)) % mod;t = (t + dfs(r - cost[dig] - cost[i], bv, 0, sum / 10)) % mod;}} else if (!bv && cv) {loe(i, 0, 9) {int sum = i + cr;int dig = sum % 10;if (i) t = (t + dfs(r - cost[dig] - cost[i], 1, cv, sum / 10)) % mod;t = (t + dfs(r - cost[dig] - cost[i], 0, cv, sum / 10)) % mod;}} else {loe(i, 0, 9) loe(j, 0, 9) {int sum = i + j + cr;int dig = sum % 10;if (i && j) t = (t + dfs(r - cost[dig] - cost[i] - cost[j], 1, 1, sum / 10)) % mod;if (i) t = (t + dfs(r - cost[dig] - cost[i] - cost[j], 1, 0, sum / 10)) % mod;if (j) t = (t + dfs(r - cost[dig] - cost[i] - cost[j], 0, 1, sum / 10)) % mod;t = (t + dfs(r - cost[dig] - cost[i] - cost[j], 0, 0, sum / 10)) % mod;}}vis[r][bv][cv][cr] = true;return t;
}int main() {// ios::sync_with_stdio(false);// cin.tie(NULL), cout.tie(NULL);int t;scanf("%d", &t);loe(k, 1, t) {clr(vis, false);int n;scanf("%d%u", &n, &mod);printf("Case #%d: %u\n", k, dfs(n - 3, 0, 0, 0));}return 0;
}
//

H. Hold Your Hand
题解链接:
HDU 5457 Hold Your Hand【最小割+字典树】
HDU - 5457 Hold Your Hand (Trie + 最小割)
hdoj 5457 Hold Your Hand 【字典树 + 最小割】

I. Stability

树链剖:HDU 5458 Stability (2015 ACM/ICPC Asia Regional Shenyang Online)
Tarjan缩点+树剖+LCA+线段树:2015 ACM/ICPC Asia Regional Shenyang OnlineHDU-5458 Stability

J. Jesus Is Here
AC的C++语言程序:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<ctime>
#include<ctype.h>
#include<stdlib.h>
#include<bitset>
#include<algorithm>
#include<numeric> //accumulate
#define endl "\n"
#define fi first
#define se second
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define mem(a,b) memset(a,b,sizeof(a))
#define rush() int T;scanf("%d",&T);while(T--)
using namespace std;
const int maxn=201314+5;
const int MOD=530600414;
int n;
long long ans[maxn];
long long len[maxn],cnt[maxn],sum[maxn];
int main()
{//cin.tie(0);//cout.tie(0);//ios_base::sync_with_stdio(false);//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);len[3]=3,len[4]=5;cnt[3]=cnt[4]=1;sum[3]=1,sum[4]=3;for(int i=5;i<=201314;i++){len[i] = (len[i-1] + len[i-2])%MOD;cnt[i] = (cnt[i-1] + cnt[i-2])%MOD;sum[i] = (sum[i-1] + sum[i-2]+(len[i-2]*cnt[i-1])%MOD)%MOD;ans[i] = (ans[i-1] + ans[i-2]+(((len[i-2]*cnt[i-2]-sum[i-2])%MOD)*cnt[i-1])%MOD+(sum[i-1]*cnt[i-2])%MOD)%MOD;}int cas=0;rush(){cin>>n;printf("Case #%d: %lld\n",++cas,(ans[n]+MOD)%MOD);}return 0;
}/*
int read()
{char c = getchar();int x = 0;for (; (c < 48 || c>57); c = getchar());for (; c > 47 && c < 58; c = getchar()){x = (x << 1) + (x << 3) + c - 48;}return x;
}
*/

AC的C++语言程序:

#include <bits/stdc++.h>using namespace std;const int MAXN = 1e6;
const int N = 201314;
typedef long long ll;
const ll mod = 530600414;ll len[MAXN], cnt[MAXN], sumpre[MAXN], sumaft[MAXN], ans[MAXN];
int main() {len[1] = 1; len[2] = 2;len[3] = 3,len[4] = 5;//ans[3] = 1;cnt[3] = 1,cnt[4] = 1;sumpre[3] = 0;sumaft[3] = 3;ans[4] = 0;for (int i = 4; i <= N;i++){len[i] = len[i-1] + len[i-2]; len[i] =len[i] % mod;cnt[i] = cnt[i-1] + cnt[i-2]; cnt[i] =cnt[i] % mod;sumpre[i] = sumpre[i-2] % mod+ sumpre[i-1] % mod +(len[i-2] %mod * cnt[i-1] % mod)%mod;sumpre[i] =sumpre[i] %  mod;sumaft[i] = sumaft[i-1] % mod + sumaft[i-2] % mod + (len[i-1] % mod *cnt[i-2] % mod) % mod;sumaft[i] =sumaft[i] % mod;ans[i] = sumpre[i-1] * cnt[i - 2] + sumaft[i-2] * cnt[i-1] + ans[i-1] + ans[i-2];ans[i] = ans[i] % mod;}
/*  for (int i = 1; i < 10;i++){cout << i << ": " << len[i] << " " << cnt[i] << " " << sumpre[i] << " " << sumaft[i] << " " << ans[i] << endl;}*/int T;cin >> T;for (int cas = 1; cas <= T; cas++){int i;cin >> i;printf("Case #%d: %lld\n",cas, ans[i]);//cout << ans[i] << endl;}return 0;
}

AC的C++语言程序:

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <set>
#include <map>
#define lo(i, n, m) for (int i = n; i < m; i++)
#define loe(i, n, m) for (int i = n; i <= m; i++)
#define rlo(i, n, m) for (int i = n - 1; i >= m; i--)
#define rloe(i, n, m) for (int i = n; i >= m; i--)
#define pb push_back
#define mk make_pair
#define clr(a, b) memset((a), (b), sizeof(a))
typedef long long LL;
using namespace std;
// const int INF = 0x3f3f3f3f;
// const int INF = 0x7fffffff;
// const LL INF = 0x3f3f3f3f3f3f3f3f;
// const LL INF = 0x7fffffffffffffff;
const int NIL = -1;
template <class T>
inline T mx(T a, T b) {return a > b ? a : b;}
template <class T>
inline T mi(T a, T b) {return a < b ? a : b;}
template <class T>
inline void sw(T &a, T &b) {T t = a; a = b; b = t;
}
template <class T>
inline T mabs(T x) {return x < 0 ? -x : x;}
inline char gc() {char ret;while ((ret = getchar()) == ' ' || ret == '\n' || ret == '\t');return ret;
}
const int LIM = 201314 + 10;
const LL MOD = 530600414;
LL ans[LIM], pre[LIM], suf[LIM], cnt[LIM], len[LIM];int main() {// ios::sync_with_stdio(false);// cin.tie(NULL), cout.tie(NULL);// buildcnt[3] = 1, cnt[4] = 1;pre[3] = 0, pre[4] = 2;suf[3] = 3, suf[4] = 3;len[3] = 3, len[4] = 5;for (int i = 5; i < LIM; i++) {ans[i] = (ans[i - 2] + ans[i - 1] + pre[i - 1] * cnt[i - 2] % MOD + suf[i - 2] * cnt[i - 1] % MOD) % MOD;pre[i] = (pre[i - 1] + len[i - 2] * cnt[i - 1] % MOD + pre[i - 2]) % MOD;suf[i] = (suf[i - 1] + len[i - 1] * cnt[i - 2] % MOD + suf[i - 2]) % MOD;cnt[i] = (cnt[i - 1] + cnt[i - 2]) % MOD;len[i] = (len[i - 1] + len[i - 2]) % MOD;}int t;scanf("%d", &t);loe(k, 1, t) {int n;scanf("%d", &n);printf("Case #%d: ", k);printf("%lld\n", ans[n]);}return 0;
}

K. Poker
题解链接:
hdu 5460 Poker(暴力)
2015沈阳网络赛K hdu5460(二进制枚举)

L. Largest Point
AC的C++语言程序:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<ctime>
#include<ctype.h>
#include<stdlib.h>
#include<bitset>
#include<algorithm>
#include<numeric> //accumulate
#define endl "\n"
#define fi first
#define se second
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define mem(a,b) memset(a,b,sizeof(a))
#define rush() int T;scanf("%d",&T);while(T--)
using namespace std;
const int maxn=5000000+5;
int n;
int a,b;
int t[maxn];
vector<int> ans;
int main()
{//cin.tie(0);//cout.tie(0);//ios_base::sync_with_stdio(false);//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int cas=0;rush(){cin>>n>>a>>b;ans.clear();for(int i=0; i<n; i++){scanf("%d",&t[i]);}sort(t,t+n);ans.push_back(0),ans.push_back(n-1);ans.push_back(1),ans.push_back(n-2);int m1=0,m2=0;for(int i=2; i<n-2; i++){if(abs(t[i])<=abs(t[m1])){m1=i;}else if(abs(t[i])<=abs(t[m2])){m2=i;}}ans.push_back(m1);ans.push_back(m2);sort(ans.begin(),ans.end());ans.erase(unique(ans.begin(),ans.end()),ans.end());int sz=ans.size();long long mx=1ll*t[0]*t[0]*a+1ll*t[1]*b;for(int i=0; i<1<<sz; i++){int cnt=0;int x1=-1,x2=-1;for(int j=0; j<sz; j++){if(i>>j&1)cnt++;}if(cnt==2){for(int j=0; j<sz; j++)if(i>>j&1){if(x1==-1)x1=j;elsex2=j;}mx=max(mx,1ll*t[ans[x1]]*t[ans[x1]]*a+1ll*t[ans[x2]]*b);mx=max(mx,1ll*t[ans[x2]]*t[ans[x2]]*a+1ll*t[ans[x1]]*b);}}printf("Case #%d: %lld\n",++cas,mx);}return 0;
}/*
int read()
{char c = getchar();int x = 0;for (; (c < 48 || c>57); c = getchar());for (; c > 47 && c < 58; c = getchar()){x = (x << 1) + (x << 3) + c - 48;}return x;
}
*/

AC的C语言程序:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 5*1e6;long long A[N + 10],B[N + 10],C[N + 10];int main()
{int T;cin>>T;for(int t = 1;t <= T;++t){int n,a,b;long long ans;cin>>n>>a>>b;for(int i = 0;i < n;++i){scanf("%lld",&A[i]);B[i] = a * A[i] * A[i];C[i] = b * A[i];}sort(B,B + n);sort(C,C + n);if((!a||!b)||(B[n - 1]/a == C[n - 1]/b*C[n - 1]/b))ans = max(B[n - 2] + C[n - 1],B[n - 1] + C[n - 2]);elseans = B[n - 1] + C[n - 1];printf("Case #%d: %lld\n",t,ans); }return 0;
}

AC的C语言程序:

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>
#include <set>
#include <map>
#define lo(i, n, m) for (int i = n; i < m; i++)
#define loe(i, n, m) for (int i = n; i <= m; i++)
#define rlo(i, n, m) for (int i = n - 1; i >= m; i--)
#define rloe(i, n, m) for (int i = n; i >= m; i--)
#define pb push_back
#define mk make_pair
#define clr(a, b) memset((a), (b), sizeof(a))
typedef long long LL;
using namespace std;
// const int INF = 0x3f3f3f3f;
// const int INF = 0x7fffffff;
// const LL INF = 0x3f3f3f3f3f3f3f3f;
// const LL INF = 0x7fffffffffffffff;
const int NIL = -1;
template <class T>
inline T mx(T a, T b) {return a > b ? a : b;}
template <class T>
inline T mi(T a, T b) {return a < b ? a : b;}
template <class T>
inline void sw(T &a, T &b) {T t = a; a = b; b = t;
}
template <class T>
inline T mabs(T x) {return x < 0 ? -x : x;}
inline char gc() {char ret;while ((ret = getchar()) == ' ' || ret == '\n' || ret == '\t');return ret;
}
struct Node {int first, second;
};
const int LIM = 5e6 + 10;
Node l[LIM];
LL a, b;inline bool cmp1(const Node &u, const Node &v) {return a * u.first * u.first > a * v.first * v.first;
}
inline bool cmp2(const Node &u, const Node &v) {return b * u.first > b * v.first;
}
inline LL sq(LL x) {return x * x;}
int main() {// ios::sync_with_stdio(false);// cin.tie(NULL), cout.tie(NULL);int t, n;scanf("%d", &t);loe(k, 1, t) {scanf("%d%lld%lld", &n, &a, &b);lo(i, 0, n) scanf("%d", &l[i].first), l[i].second = i;sort(l, l + n, cmp1);int l1 = l[0].first, p1 = l[0].second, l2 = l[1].first;sort(l, l + n, cmp2);int r1 = l[0].first, p3 = l[0].second, r2 = l[1].first;printf("Case #%d: ", k);if (p1 != p3) printf("%lld", a * sq(l1) + b * r1);else printf("%lld", mx(a * sq(l2) + b * r1, a * sq(l1) + b * r2));putchar('\n');}return 0;
}

M. Manors
题解链接:
hdu 5462 Manors(半平面交)
Manors HDU - 5462

2015 ACM/ICPC Asia Regional Shenyang Online题解相关推荐

  1. 2015 ACM/ICPC Asia Regional Changchun Online题解

    以下所有AC题解程序来自"仙客传奇"团队. AC题数:7/13 ABEGHJL A. Alisha's Party AC的C++语言程序: #pragma warning(disa ...

  2. 2015 ACM/ICPC Asia Regional Hefei Online题解

    以下所有AC题解程序来自"仙客传奇"团队. A. Monitor the Alpacas B. The Relationship in Club C. Difference of ...

  3. Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online

    网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...

  4. 2016 ACM/ICPC Asia Regional Shenyang Online

    I:QSC and Master 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意: 给出n对数keyi,vali表示当前这对数的键值和权值 ...

  5. [Contest]2017 ACM/ICPC Asia Regional Shenyang Online(01 03 07 09 10 11待补)

    1001 string string string 题意 给定一个字符串$s$,求其中出现$k$次的子串的个数. 题解 后缀自动机. 代码 1002 cable cable cable 题意 给定$M ...

  6. 2017 ACM/ICPC Asia Regional Shenyang Online array

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6197 题目大意:给出一个序列,删去k个元素是否能构成不上升序列或不下降子序列 (呃,先凑个数吧 二分+ ...

  7. 2017 ACM/ICPC Asia Regional Shenyang Online Ping Ping Ping 树链剖分+树状数组

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6203 题目大意:给出n+1个节点的树( 3<n<10^4),并给出m对点(m<=50 ...

  8. hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online...

    很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死-- 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了--没了! 反复读题,终于在偶然间 ...

  9. HDU - 5493 Queue 2015 ACM/ICPC Asia Regional Hefei Online(线段树)

    按身高排序,每个人前面最高的人数有上限,如果超出上限说明impossible, 每次考虑最小的人,把他放在在当前的从左往右第k+1个空位 因为要求字典序最小,所以每次k和(上限-k)取min值. 没有 ...

最新文章

  1. 【转】Maven实战(七)---传递依赖
  2. 【Python初学者】准备
  3. php数组函数及用法,php数组函数 in_array 的用法及注意事项
  4. 在未来给我们看病的将是医疗机器人?
  5. SAP Fiori OData取数据的同步模式和异步模式比较
  6. 解决minukube启动时因为未设代理导致的启动失败错误
  7. python中自带的模块_python中的模块详解
  8. 细粒度权限控制 linux,利用docker插件实现细粒度权限控制
  9. kotlin中判断字符串_Kotlin程序删除字符串中所有出现的字符
  10. linux上安装shell编辑器与linux运维面试题
  11. OpenGL 的渲染流水线
  12. Linux下安装python 2.7.13
  13. css对大小写不敏感
  14. jquery的ajax方法实例,jquery的ajax方法实例教程
  15. 24个希腊字母(符号) 附字母表
  16. 交互技术基础(复习)
  17. 【ceph】ceph osd启动及peering过程中osdmap相关加载和更新流程
  18. H.264/AVC 的各大主流编解码器
  19. draco3D轻量化技术在Unity3D中应用
  20. 罗振宇《时间的朋友》2017跨年演讲摘要

热门文章

  1. 转: 中/英文资料 PKCS #11 函数列表
  2. ArcGIS水文分析实战教程(10)河流平均比降计算
  3. Kubernetes集群搭建之Etcd集群配置篇
  4. wamp 403 禁止访问
  5. jQuery Mobile 高级设计模板
  6. 来自reallh大的游戏编程饕餮大餐!
  7. 网游Server端开发基础
  8. istio sidecar流量接管_Istio是个啥?看完此文彻底搞懂(赠书)
  9. linux中.开头的变量,linux中的变量
  10. SQL中 ROW_NUMBER 函数的用法