intmain(){ int n , m; cin >> n; cin >> m; vector<vector<int>> arr(n, vector<int>(m, 0)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> arr[i][j]; } }
int MAX = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { int num1 = arr[i][j]; for (int x = 0; x < n; ++x) { for (int y = 0; y < m; ++y) { int num2 = arr[x][y]; if (x == i || y == j) continue; MAX = max(MAX, num1 * num2); } } } } cout <<MAX<<endl; return0; }
inthelp(vector<int>& arr, int left, int right){ int tmp = arr[left]; while (left < right) { while (left < right && arr[right] >= tmp) right--; arr[left] = arr[right]; while (left < right && arr[left] <= tmp) left++; arr[right] = arr[left]; } arr[left] = tmp; return left; }
voidqsort(vector<int>& arr, int left, int right){ if (left > right) return; int mid = help(arr, left, right); qsort(arr, left, mid - 1); qsort(arr, mid + 1, right); }
intmain(){ int n = 0; cin >> n; vector<int> arr(n, 0); for (int i = 0; i < n; ++i) { cin >>arr[i]; } qsort(arr, 0, n - 1); for (int i = 0; i < n; ++i) { cout << arr[i] <<" "; } }
第3题
统计数字二进制形式1的个数
1 2 3 4 5 6 7 8 9 10 11
intmain(){ int num; cin >> num; int cnt = 0; while (num) { if (num & 1) cnt++; num >>= 1; } cout << cnt; return0; }
第4题
将一个长度位m的字符串左移n位
输入描述:
第一行位长度位m的字符串 第二行位左移的位数n 1 < n,m < 2000
输出描述:
一行输出左移后的字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
intmain(){ string str; int n ; getline(cin, str); cin >> n; n %= str.size(); string res = ""; int cnt = str.size(); int idx = n; while (cnt--) { idx %= str.size(); res += str[idx++]; } cout << res; }
intmaxSubArray(vector<int>& nums, int& left, int& right){ int len = nums.size(); vector<int> dp(len); int maxSum = nums[0]; for (int i = 0; i < len; ++i) { if (i == 0) dp[0] = nums[0]; else { if (dp[i - 1] + nums[i] < nums[i]){ dp[i] = nums[i]; left = i; } else { dp[i] = dp[i - 1] + nums[i]; } } if (maxSum<dp[i]) { right = i; maxSum = dp[i]; } } if (left > right) { left = 0, right = 0; return dp[0]; } return maxSum; }
intmain(){ int cnt; cin >> cnt; vector<vector<int>> input(cnt); for (int i = 0; i < cnt; ++i) { int n = 0; cin >> n; input[i].resize(n); for (int j = 0; j < n; ++j) { cin >> input[i][j]; } } for (int i = 0; i < cnt; ++i) { int left = 0, right = 0; int res = maxSubArray(input[i], left, right); sort(input[i].begin(), input[i].begin()+ right - left + 1, less<int>()); res = left != right ? res - *input[i].begin() : input[i][0] * 2; cout << res << endl; } return0; }
#include<iostream> #include<vector> #include<algorithm> usingnamespace std; int row, col; int cnt; vector<int> res; int dff[4][2] = {{1, 0}, {-1, 0},{0, 1},{0, -1}};
voiddfs(int x, int y, vector<vector<int>>& arr, vector<vector<bool>>& isVis){ if (isVis[x][y]) return; isVis[x][y] = true; cnt++;
int MAX = INT_MIN; for (int i = 0; i < 4; ++i) { int m = x + dff[i][0]; int n = y + dff[i][1]; if (m < row && m >= 0 && n < col && n >= 0){ MAX = max(MAX, arr[m][n]); } } if (arr[x][y] > MAX) { res.push_back(cnt); return; }
for (int i = 0; i < 4; ++i) { int m = x + dff[i][0]; int n = y + dff[i][1]; if (m < row && m >= 0 && n < col && n >= 0 && arr[m][n] > arr[x][y]){ dfs(m, n,arr,isVis); } } isVis[x][y] = false; cnt--; }
intmain(){ cin >> row; cin >> col; vector<vector<int>> arr(row, vector<int>(col, 0)); for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { cin >> arr[i][j]; } }
int MIN = INT_MAX; int min_x = 0, min_y = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; ++j) { if (arr[i][j] < MIN) { min_x = i; min_y = j; MIN = arr[i][j]; } } } vector<vector<bool>> isVis(row, vector<bool>(col, false));
string s; voidfun(int n){ if (n == 1 || n == 0) return; for (int i = 2; i <= n; i++){ if (n % i == 0) { s += ('0' + i); s += '*'; fun(n / i); break; } } }
voidchange(int* a, int &b,int c){ c =* a; b = 30; *a = 20; } intmain(){ int a = 10, b = 20, c = 30; change(&a,b, c); printf("%d, %d, %d", a, b, c); return0; }
int off[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; vector<vector<bool>> isVis; int row, col; int cnt = 0; int endX, endY; voiddfs(int x, int y, int depth) { if (isVis[x][y]) return; isVis[x][y] = true; depth++; if (x == endX && y == endY && depth == row * col) { cnt++; isVis[x][y] = false; return; } for (int i = 0; i < 4; ++i) { int m = x + off[i][0]; int n = y + off[i][1]; if (m >= 0 && m < row && n >= 0 && n < col && !isVis[m][n]) dfs(m, n, depth); } depth--; isVis[x][y] = false; }
intmain(){ int n, m; cin >> n; cin >> m; unordered_map<int, TreeNode*> hash; for (int i = 0; i < m; ++i) { int uid, dir, vid; cin >> uid; cin >> dir; cin >> vid;
if (hash.find(uid) == hash.end()) { hash[uid] = newTreeNode(uid); }
if (dir == 1) { // left if (hash.find(vid) == hash.end()) hash[vid] = newTreeNode(vid); hash[uid]->left = hash[vid]; } else { // right if (hash.find(vid) == hash.end()) hash[vid] = newTreeNode(vid); hash[uid]->right = hash[vid]; } }
vector<vector<char>> map; vector<vector<bool>> isVis; int endX, endY, n; int depth = 0; int MIN = INT_MAX; int off[4][2] = { {1,0}, {-1,0}, {0,1}, {0, -1} };
voiddfs(int x, int y) { if (isVis[x][y]) return; isVis[x][y] = true; depth++;
if (x == endX && y == endY) { MIN = min(MIN, depth); return; } for (int i = 0; i < 4; ++i) { int xi = x + off[i][0]; int yi = y + off[i][1]; if (xi >= 0 && xi < n && yi >= 0 && yi < n && map[xi][yi] != '#' && map[xi][yi] != '@') { dfs(xi, yi); } } depth--; isVis[x][y] = false; }
booloperator != (const vector<int>& v1, const vector<int>& v2) { for (int i = 0; i < v1.size(); ++i) { if (v1[i] != v2[i]) returntrue; } returnfalse; }
boolisPali(vector<vector<int>> arr) { int left = 0, right = arr.size() - 1; while (left < right) { if (arr[left] != arr[right]) returnfalse; left++, right--; } returntrue; }
intmain1(){ cin >> n; cin >> m; arr.resize(n, vector<int>(m, 0));
for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> arr[i][j]; } }
int right = n; while (right) { if (isPali(arr)) { right /= 2; arr.erase(arr.begin() + right, arr.end()); continue; } break; } for (auto lev : arr) { for (auto num : lev) { cout << num << " "; } cout << endl; } return0; }