A:签到题,直接for一遍
B:取异或就是不同的数,然后bitcount一下判断即可
C:dp,dp[i]表示到i的最大值,然后对取与不取当前位置进行转移即可,要先把前缀和预处理出来
D:先利用map,把字符串hash掉,然后建图,现场在做的时候是直接记忆化搜索,不过这样处理不了环的情况,果断fst了,后来换了下姿势,先求强连通进行缩点,缩点完就是一个dag了,然后记忆化搜索即可
代码:
A:
#include int main() { int n, p, q; int ans = 0; scanf("%d", &n); while (n--) { scanf("%d%d", &p, &q); if (q - p >= 2) ans++; } printf("%d\n", ans); return 0;}
B:
#include #include int n, m, k;int bitcount(int x) { int ans = 0; while (x) { ans += (x&1); x >>= 1; } return ans;}const int N = 1005;int x[N];int main() { scanf("%d%d%d", &n, &m, &k); for (int i = 0; i
C:
#include #include #include using namespace std;const int N = 5005;const long long INF = 0x3f3f3f3f3f3f3f;long long dp[N][N];int n, m, k;long long num[N], pre[N];int main() { scanf("%d%d%d", &n, &m, &k); for (int i = 1; i = m) dp[i][j] = max(dp[i][j], dp[i - m][j - 1] + pre[i] - pre[i - m]); dp[i][j] = max(dp[i][j], dp[i - 1][j]); } } printf("%lld\n", dp[n][k]); return 0;}
D:
#include #include #include #include #include #include #include #include using namespace std;typedef long long ll;const int N = 1000005;vector g[N], scc[N];int pre[N], lowlink[N], sccno[N], dfs_clock, scc_cnt;stack S;typedef pair pii;int n, m, hn;map hash;string str[N];pii s[N];pii p[N];pii dp[N];int vis[N];vector g2[N];void dfs_scc(int u) { pre[u] = lowlink[u] = ++dfs_clock; S.push(u); for (int i = 0; i = 'A' && str[i] > str[i]; get(str[i]); } scanf("%d", &m); string u, v; while (m--) { cin >> u >> v; int uu = get(u); int vv = get(v); g[uu].push_back(vv); } find_scc(hn); ll ans1 = 0, ans2 = 0; for (int i = 0; i
查看更多关于CodeforcesRound#267(Div.2)_html/css_WEB-ITnose的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did105630