Algorithm-Renewed

This commit is contained in:
e2hang
2025-09-13 22:37:17 +08:00
parent 265b8af720
commit 7b6acef275
14 changed files with 778 additions and 1 deletions

View File

@@ -0,0 +1,36 @@
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
auto search(vector<int>& arr, int start, int end, int target) -> int{
if(start >= end) return -1;
int mid = (start + end) / 2;
if(target == arr[mid]) return mid;
else if(target < arr[mid])
search(arr, start, mid, target);
else if(target > arr[mid])
search(arr, mid + 1, end, target);
}
int main(){
vector<int> arr;
int n;
cin >> n;
arr.resize(n);
for(int i = 0; i < n; i++){
cin >> arr[i];
}
sort(arr.begin(), arr.end());
int t;
cin >> t;
int pos = search(arr, 0, arr.size() - 1, t);
if(pos != -1)
cout << "Pos: " << pos + 1 << ", Num: " << arr[pos] << endl;
else
cout << "Not Found" << endl;
return 0;
}

View File

@@ -0,0 +1,56 @@
#include <iostream>
#include <vector>
using namespace std;
int tile = 1; // <20><><EFBFBD>ڱ<EFBFBD><DAB1>Dz<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
void cover(vector<vector<int>>& board, int top_x, int top_y, int defect_x, int defect_y, int size) {
if (size == 2) {
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 2; ++j)
if (top_x+i != defect_x || top_y+j != defect_y)
board[top_x+i][top_y+j] = tile;
tile++;
return;
}
int mid = size/2;
int cx = top_x + mid;
int cy = top_y + mid;
// <20>ж<EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
int quadrant = 0;
if (defect_x < cx && defect_y < cy) quadrant = 0; // <20><><EFBFBD><EFBFBD>
else if (defect_x < cx && defect_y >= cy) quadrant = 1; // <20><><EFBFBD><EFBFBD>
else if (defect_x >= cx && defect_y < cy) quadrant = 2; // <20><><EFBFBD><EFBFBD>
else quadrant = 3; // <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>L<EFBFBD>͹<EFBFBD><CDB9>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD>޵<EFBFBD><DEB5><EFBFBD><EFBFBD>Ľ<EFBFBD>
if (quadrant != 0) board[cx-1][cy-1] = tile;
if (quadrant != 1) board[cx-1][cy] = tile;
if (quadrant != 2) board[cx][cy-1] = tile;
if (quadrant != 3) board[cx][cy] = tile;
tile++;
// <20>ݹ<EFBFBD><DDB9>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cover(board, top_x, top_y, quadrant==0?defect_x:cx-1, quadrant==0?defect_y:cy-1, mid); // <20><><EFBFBD><EFBFBD>
cover(board, top_x, top_y+mid, quadrant==1?defect_x:cx-1, quadrant==1?defect_y:cy, mid); // <20><><EFBFBD><EFBFBD>
cover(board, top_x+mid, top_y, quadrant==2?defect_x:cx, quadrant==2?defect_y:cy-1, mid); // <20><><EFBFBD><EFBFBD>
cover(board, top_x+mid, top_y+mid, quadrant==3?defect_x:cx, quadrant==3?defect_y:cy, mid); // <20><><EFBFBD><EFBFBD>
}
int main() {
int k = 3; // 2^3 x 2^3 <20><><EFBFBD><EFBFBD>
int n = 1<<k;
vector<vector<int>> board(n, vector<int>(n, 0));
int defect_x = 2, defect_y = 3; // ȱ<><C8B1>λ<EFBFBD><CEBB>
cover(board, 0, 0, defect_x, defect_y, n);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (auto &row : board) {
for (auto &x : row) cout << x << "\t";
cout << "\n";
}
}

View File

@@ -0,0 +1,13 @@
#include <iostream>
#include <vector>
//˼·<CBBC><C2B7>
/*
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±߿<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD>˻<EFBFBD><EFBFBD>ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>(<28><><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD><EFBFBD><EFBFBD>)<29><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ʼ<EBBFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD> == <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD>󣬻<EFBFBD><F3A3ACBB>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣬷ֱ<F2A3ACB7><D6B1><EFBFBD><EFBFBD><EFBFBD>
*/
using namespace std;
int main(){
return 0;
}

View File

@@ -0,0 +1,54 @@
#include <iostream>
#include <vector>
using namespace std;
void mergeSort(vector<int>& path, int start, int end){
if(start >= end) return;
int mid = (end + start) / 2;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9>ֽ<EFBFBD>
mergeSort(path, start, mid);
mergeSort(path, mid + 1, end);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
vector<int> temp;
int i = start, j = mid + 1;
while(i <= mid && j <= end){
if(path[i] >= path[j]){
temp.push_back(path[j]);
j++;
}
else{
temp.push_back(path[i]);
i++;
}
}
while(i <= mid) temp.push_back(path[i++]);
while(j <= end) temp.push_back(path[j++]);
//ֱ<>Ӱѵ<D3B0><D1B5><EFBFBD><EFBFBD>õĿ<C3B5><C4BF><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD>
for(int x = 0; x < temp.size(); x++){
path[start + x] = temp[x];
}
}
int main(){
vector<int> arr;
int n;
cin >> n;
arr.resize(n);
for(int i = 0; i < n; i++){
cin >> arr[i];
}
mergeSort(arr, 0, arr.size() - 1);
for(int i = 0; i < arr.size(); i++){
if(i) cout << " ";
cout << arr[i];
}
cout << endl;
return 0;
}