2026.3.17oj总结

发布时间:2026/7/2 20:07:36

2026.3.17oj总结 1.分糖果问题描述肖恩和帕特里克是兄弟他们从他们的父母那里得到了很多糖果。每一块糖具有一个正整数的价值孩子们希望分他们得到的糖果。首先肖恩将这些糖果分成两堆并选择一堆给帕特里克。然后帕特里克将尝试计算每堆的价值其中每堆的价值是那堆糖果价值的总和如果他觉得没有平等的价值他将开始哭了起来。不幸的是帕特里克太小了所以不能正确的计算。他只会二进制无进位的加法。比如说他想算12二进制为1100加5二进制为101他会把最右边的两位加法算正确但是第三位会忘记进位。即000,011,101,110因此帕特里克算12加5的结果为9。下面几个是帕特里克算的结果5 4 17 9 1450 10 56肖恩数学很好他想得到价值总和更高的糖果并且不让他的弟弟哭。如果可能他会分成两个非空的糖果袋让帕特里克认为双方都有相同的值的糖果。给你每一袋糖果每一块糖果的价值我们想知道是否可能让帕特里克相信他们得到糖果价值的总量是相同的。如果可能计算出肖恩能得到的最大的价值。总结异或计算如果糖果价值进行异或计算得到0的话证明可以配平#includeiostream#includestring#includevector#include algorithmusing namespace std;int main() {int T;cin T;while (T--) {int N;cin N;vectorint c(N);int normal_v 0;int p_v 0;int min_v 101;for (int i 0;i N;i) {cin c[i];normal_v normal_v c[i];p_v p_v ^ c[i];if (c[i] min_v) {min_v c[i];}}if (p_v ! 0) {cout NO endl;}else {cout normal_v - min_v endl;}}}、2.循环数问题描述循环数是那些不包括0这个数字的没有重复数字的整数 (比如说, 81362) 并且同时具有一个有趣的性质, 就像这个例子:如果你从最左边的数字( 记为n在这个例子中是8) 开始往右边数一直数n个数字(如果已经到了最右边则回到最左边),你会停在另一个不同的数字上。如果停在一个相同的数字上这个数就不是循环数。就像: 8 1 3 6 2 从最左边接下去数8个数字: 1 3 6 2 8 1 3 6 所以下一个数字是6. 重复这样做 (这次从6开始数6个数字) 并且你会停止在一个新的数字上: 2 8 1 3 6 2, 也就是2. 再这样做 (这次数两个): 8 1。 再一次 (这次数一个): 3。 又一次: 6 2 8 这时你回到了起点。此时我们数到的数字依次是8 6 2 1 3即每一个数字都被数了1次并且回到了起点。如果你将每一个数字都数了1次以后没有回到起点, 你的数字不是一个循环数。给你一个数字 M (在1到9位之间), 找出第一个比 M大的循环数输入的M保证这个循环数能保存在4位的有符号整数中。总结判断循环数模拟循环跳跃的时候注意此时的数组是正向还是逆向的最后判断是否是循环数时要注意最后的pos0回到原点。#includeiostream#includestring#includevector#include algorithmusing namespace std;bool isCycle(int n) {//存储每一位数字vectorintdigit;int start n;while (n 0) {digit.push_back(n % 10);n n / 10;}reverse(digit.begin(), digit.end());//判断是否有重复数字bool used[10] { false };for (int i 0;i digit.size();i) {int a digit[i];if (a 0) return false;if (used[a] true) return false;used[a] true;}//循环int pos 0;int count 0;bool visit[10] { false };while (visit[pos] false) {visit[pos] true;int step digit[pos];pos (pos step) % digit.size();count;}if (count digit.size()pos0) {//必须回到起点return true;}return false;}int main() {int N;cin N;int first N 1;while (!isCycle(first)) {first;}cout first;}3.分数化小数问题描述写一个程序输入一个形如N/D的分数(N是分子D是分母)输出它的小数形式。如果小数有循环节的话把循环节放在一对圆括号中。总结#includeiostream#includestring#includevectorusing namespace std;int main() {int N, D;cin N D;int integer N / D;int remainder N % D;string res to_string(integer);if (remainder 0) {res .0;cout res endl;return 0; // 缺少return会继续执行下面的代码}res .;vectorint remainderpos(D, -1); // 初始化为-1表示未出现vectorbool visit(D, false);string decimal;int pos 0;while (remainder ! 0) {if (visit[remainder]) {int start remainderpos[remainder]; // 循环开始的位置string nonCycle decimal.substr(0, start); // 非循环部分string cycle decimal.substr(start); // 循环部分res res nonCycle ( cycle );// 处理长输出if (res.length() 76) {for (size_t i 0; i res.length(); i 76) {cout res.substr(i, 76) endl;}}else {cout res endl;}return 0;}visit[remainder] true;remainderpos[remainder] pos;remainder remainder * 10;int digit remainder / D;decimal to_string(digit);remainder remainder % D;}// 没有循环节的情况res decimal;if (res.length() 76) {for (size_t i 0; i res.length(); i 76) {cout res.substr(i, 76) endl;}}else {cout res endl;}return 0;}4.回文或镜面回文总结输出镜面回文的时候注意没有镜面回文的字符返回\0#includeiostream#includestring#includevector#includealgorithmusing namespace std;bool isHuiwen(string s) {string s1 s;reverse(s1.begin(), s1.end());return s s1;}char Mirror(char c) {switch (c) {case A:return A;case E:return 3;case H:return H;case I:return I;case L:return J;case J:return L;case M:return M;case O:return O;case S:return 2;case T:return T;case U:return U;case V:return V;case W:return W;case X:return X;case Y:return Y;case Z:return 5;case 1:return 1;case 2:return S;case 3:return E;case 5:return Z;case 8:return 8;default:return \0;}}bool isJingmian(string s) {string mstring;for (int i 0;i s.length();i) {char c Mirror(s[i]);if (c \0) return false;mstring mstring c;}reverse(mstring.begin(), mstring.end());return mstring s;}int main() {string s;bool firstcase true;while (cin s) {if (!firstcase) {cout endl;}firstcase false;if (isHuiwen(s) isJingmian(s)){cout s -- is a mirrored palindrome. endl;;}else if (isHuiwen(s) !isJingmian(s)) {cout s -- is a regular palindrome. endl;}else if(!isHuiwen(s) isJingmian(s)){cout s -- is a mirrored string. endl;}else {cout s -- is not a palindrome. endl;}}}5.数列2给你一个数列从中选出1个或若干个数可以不连续要求这些数的和能被11整除问这样的选数方法一共有多少种。#includeiostream#includestring#includevector#includealgorithmusing namespace std;bool isChu11(int n) {if (n % 11 0) return true;return false;}int main() {int n;while (cin n) {vectorint arr(n);for (int i 0;i n;i) {cin arr[i];}int count 0;int total 2 ^ n;for (int mask 1; mask (1 n); mask) {int sum 0;for (int i 0; i n; i) {if (mask (1 i)) {sum arr[i];}}if (isChu11(sum)) count;}cout count endl;}}

相关新闻