主页 > 游戏开发  > 

河南理工XCPC萌新选拔赛

河南理工XCPC萌新选拔赛
A 树之荣荣 青梅熙熙

树之荣荣 青梅熙熙 这个题是一个经典的博弈问题。我们可以考虑一种情况,就是你每一次都会取一个。那么最后一个你肯定不能取。所以我们可以考虑减去一个后的值。判断它的和是奇数还是偶数即可。

int n; cin >> n; int s = 0; for (int i = 1; i <= n; i ++) { int x; cin >> x; s += x - 1; } if (s & 1) { cout << "shuai"; } else cout << "tian"; B 夏蝉鸣鸣 两心惶惶

夏蝉鸣鸣 两心惶惶 这个题目当时打的时候没有认真看题。错了好多次。轻敌了。下次一定要认真看题目。 这个题的话主要是考了一个字符储存的问题。注意要倒着对这个字符进行更新。记录一下最后一个字符,最后把第一个字符赋给它即可。 下面是代码。

#include <bits/stdc++.h> using namespace std; using i64 = long long; constexpr int N = 1e3 + 10; int g[N][N]; struct node { int op, c; } a[N]; void solve() { int n, m, x, y; cin >> n >> m >> x >> y; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { char ch; cin >> ch; g[i][j] = ch - 'a'; } } int p, q; cin >> p >> q; for (int k = 1; k <= q; k++) { int op, c; cin >> op >> c; a[k].op = op, a[k].c = c; } while (p --) for (int k = 1; k <= q; k++) { int op = a[k].op, c = a[k].c; if (op == 1) { int u = g[c][m]; for (int i = m; i >= 1; i--) { g[c][i] = g[c][i - 1]; } g[c][1] = u; } else { int u = g[n][c]; for (int i = n; i >= 1; i--) { g[i][c] = g[i - 1][c]; } g[1][c] = u; } } cout << char('a' + g[x][y]); return; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; while (t--) { solve(); } return 0; } C 田垄恹恹 我心难言

田垄恹恹 我心难言 这个题目我们对 n == 1 和 n == 2 的情况进行特判一下。如果 n == 1 的话很容易知道肯定不可以成立的。对于n == 2 的情况。 1 2 2 1 1 2 这种情况也是不可以的。1 2 这种情况就是去掉 1 或者 2 都行。所以答案是 1 那么对于 n == 3 的时候我们可以玩一下样例就知道 1 2 3 1 2 3 这种情况,就是 1。我们取 2 2 就行了。 1 3 2 1 2 3 这种情况 2 2,也是 1。所以我们判断这两种情况是 1,其他的话,我们可以证明 2 次一定可以完成。你总是可以找到一组满足条件。可以自己玩一下数字看看。 代码

int n; cin >> n; vector<int> a(n + 1); vector<int> b(n + 1); for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> b[i]; if (n == 1) { cout << -1 << "\n"; return ; } else if (n == 2) { bool flag = true; for (int i = 1; i <= n; i ++) if (a[i] != b[i]) flag = false; if (flag) { cout << -1 << "\n"; return ; } } int ans; bool flag = false; for (int i = 1; i <= n; i++) { if ((a[i] == b[i] && i != n && i != 1) || a[i] == b[i + 1] || a[i] == b[i - 1]) flag = true; } if (flag) ans = 1; else ans = 2; cout << ans << "\n"; D 淇水汤汤 渐车帷裳

淇水汤汤 渐车帷裳 这个题就跟着题目模拟就行了。感觉没有什么好说的。看代码吧。

int n, m; cin >> m >> n; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) cin >> g[i][j]; } char s; int x, y, k; cin >> x >> y >> s >> k; char tow = s; while (k--) { // cout << x << " " << y << "\n"; if (tow == 'U') { y -= 1; } else if (tow == 'D') { y += 1; } else if (tow == 'L') { x -= 1; } else { x += 1; } if (tow == 'U') { if (g[x][y]) { tow = 'R'; g[x][y] = 0; } else { tow = 'L'; g[x][y] = 1; } } else if (tow == 'D') { if (g[x][y]) { tow = 'L'; g[x][y] = 0; } else { tow = 'R'; g[x][y] = 1; } } else if (tow == 'L') { if (g[x][y]) { tow = 'U'; g[x][y] = 0; } else { tow = 'D'; g[x][y] = 1; } } else { if (g[x][y]) { tow = 'D'; g[x][y] = 0; } else { tow = 'U'; g[x][y] = 1; } } } cout << x << " " << y; F 执子之手 与子偕老

执子之手 与子偕老 我们找一下十万以内和甜美互质的数即可。gcd 是一个求最大公倍数的函数。

int n; cin >> n; int ans = 0; for (int i = 2; i <= 100000; i ++) { if (__gcd(i, n) == 1) ans ++; } cout << ans; H 子兴视夜 明星有烂

子兴视夜 明星有烂 这个直接让 m / n 即可。因为 c/c++ 是向下取整,所以直接除以即可。

int n, m; cin >> n >> m; cout << m / n; I 无思远人 劳心怛怛

无思远人 劳心怛怛 背一下诗就好了。哈哈,考试的时候没看题就瞎做,还错了一次。逆天。

string s1 = "床前明月光"; string s2 = "疑是地上霜"; string s3 = "举头望明月"; string s4 = "低头思故乡"; string s; cin >> s; if (s == s1) cout << s2; if (s == s2) cout << s1; if (s == s3) cout << s4; if (s == s4) cout << s3;
标签:

河南理工XCPC萌新选拔赛由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“河南理工XCPC萌新选拔赛