From 5ebd540fa53c7b98834c02ad9eeb25e9670a50d6 Mon Sep 17 00:00:00 2001 From: e2hang <2099307493@qq.com> Date: Thu, 14 Aug 2025 12:59:59 +0800 Subject: [PATCH] 08-14-25 --- Luogu/P1007 独木桥.cpp | 25 +++++++++++ Luogu/P1011 [NOIP 1998 提高组] 车站.cpp | 19 +++++++++ Luogu/P1012 [NOIP 1998 提高组] 拼数.cpp | 42 +++++++++--------- Luogu/P1015 [NOIP 1999 普及组] 回文数.cpp | 52 +++++++++++++++++++++++ 4 files changed, 115 insertions(+), 23 deletions(-) create mode 100644 Luogu/P1007 独木桥.cpp create mode 100644 Luogu/P1011 [NOIP 1998 提高组] 车站.cpp create mode 100644 Luogu/P1015 [NOIP 1999 普及组] 回文数.cpp diff --git a/Luogu/P1007 独木桥.cpp b/Luogu/P1007 独木桥.cpp new file mode 100644 index 0000000..d1ea648 --- /dev/null +++ b/Luogu/P1007 独木桥.cpp @@ -0,0 +1,25 @@ +#include +#include +using namespace std; +int main(){ + int length, n; + int tmp; + int js; + vector ma, mi; + cin >> length >> n; + for(int i = 0;i < n; i++){ + cin >> tmp; + js = max(length - tmp + 1, tmp); + ma.push_back(js); + js = min(length - tmp + 1, tmp); + mi.push_back(js); + } + int smax = 0; + int smax2 = 0; + for(int i = 0;i < n; i++){ + if(ma.at(i) > smax) smax = ma[i]; + if(mi[i] > smax2) smax2 = mi[i]; + } + cout << smax2 << " " << smax; + return 0; +} diff --git a/Luogu/P1011 [NOIP 1998 提高组] 车站.cpp b/Luogu/P1011 [NOIP 1998 提高组] 车站.cpp new file mode 100644 index 0000000..aad3e8c --- /dev/null +++ b/Luogu/P1011 [NOIP 1998 提高组] 车站.cpp @@ -0,0 +1,19 @@ +#include +#include +using namespace std; +int main(){ + vector feb; + int n, a, m, x; + cin >> a >> n >> m >> x; + feb.reserve(n); + feb.push_back(1);feb.push_back(1); + for(int i = 2; i < n; i++){ + feb[i] = feb[i - 1] + feb[i - 2]; + } + int b = (m - (feb[n - 4] + 1) * a) / (feb[n - 3] - 1); + int out = (feb[x - 3] + 1) * a + (feb[x - 2] - 1) * b; + cout << out << endl; + return 0; +} +//5 7 32 4 + diff --git a/Luogu/P1012 [NOIP 1998 提高组] 拼数.cpp b/Luogu/P1012 [NOIP 1998 提高组] 拼数.cpp index 3bf292f..589d46a 100644 --- a/Luogu/P1012 [NOIP 1998 提高组] 拼数.cpp +++ b/Luogu/P1012 [NOIP 1998 提高组] 拼数.cpp @@ -1,31 +1,27 @@ -#include #include +#include +#include using namespace std; + +struct cmp{ + bool operator()(const string& a, const string& b){ + return a + b > b + a; + } +}; + int main(){ - char a[21][11]; - char sum[220]=""; + set a; int n; - cin>>n; - - for(int i=0;i>a[i]; + cin >> n; + string tmp; + for(int i = 0;i < n; i++){ + cin >> tmp; + a.emplace(tmp); } - int js=1; - char tmp[11]=""; - while(js!=0){ - js=0; - for(int i=0;i +#include +#include +using namespace std; + +int charToInt(char c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'A' && c <= 'Z') return c - 'A' + 10; + if (c >= 'a' && c <= 'z') return c - 'a' + 10; + return 0; +} + +char intToChar(int x) { + if (x < 10) return '0' + x; + return 'A' + (x - 10); +} + +string add(const string& a, int jz) { + string b(a); + reverse(b.begin(), b.end()); + string tmp(a.size() + 1, '0'); + int carry = 0; + for (size_t i = 0; i < a.size(); i++) { + int ia = charToInt(a[i]); + int ib = charToInt(b[i]); + int sum = ia + ib + carry; + carry = sum / jz; + tmp[i] = intToChar(sum % jz); + } + if (carry > 0) tmp[a.size()] = intToChar(carry); + else tmp.pop_back(); + return tmp; +} + +bool check(const string& x) { + return equal(x.begin(), x.begin() + x.size()/2, x.rbegin()); +} + +int main(){ + int jz; + string n; + cin >> jz >> n; + for (int i = 0; i <= 30; i++) { + if (check(n)) { + cout << "STEP=" << i << endl; + return 0; + } + n = add(n, jz); + } + cout << "Impossible!" << endl; +} +