时间:2023/12/19
Standings - Educational Codeforces Round 160 (Rated for Div. 2) - Codeforces
A 给出一个2-8位数,将其分成两个数a,b。其中a<b,无前导0, 都严格大于0;
原思路:从中间开始a下标向前移动,但前导0不好判断(太捞了)
思路:....
#include "bits/stdc++.h"
using namespace std;
#define int long long
#define all(v) v.begin(), v.end()
#define rall(v) v.end(), v.begin()
#define pd push_back
#define sz(a) (int)a.size()
void solve(){
string s;
cin >> s;
if (s[0] == '0') {
cout << -1 << '\n';
return ;
}
int n = s.length() >> 1;
for (int i = 1; i <= n; ++i) {
string a = s.substr(0, i);
string b = s.substr(i);
if (b[0] == '0') {
continue;
}
if (a.length() < b.length() || (a.length() == b.length() && a < b)) {
cout << a << ' ' << b << '\n';
return;
}
}
cout << -1 << '\n';
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
cin>>t;
while(t--){
solve();
}
return 0;
}
蓝桥杯小白赛
3.小蓝的金牌梦【算法赛】 - 蓝桥云课 (lanqiao.cn)
数组长度为质数,最大的子数组和
素数 + 前缀和
#include "bits/stdc++.h"
using namespace std;
#define int long long
#define N 100010
int ans[N];
int s[N];
vector<int> prime;
bool is_prime[N];
void Era(int n) {
is_prime[0] = is_prime[1] = true;
for (int i = 2; i <= n; ++i) {
if (!is_prime[i]) {
prime.push_back(i);
if ((int)i * i > n) continue;
for (int j = i * i; j <= n; j += i) is_prime[j] = true;
}
}
}
void Eratosthenes(int n) {
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; ++i) is_prime[i] = true;
for (int i = 2; i <= n; ++i) {
if (is_prime[i]) {
prime.push_back(i);
if ((long long)i * i > n) continue;
for (int j = i * i; j <= n; j += i)
// 因为从 2 到 i - 1 的倍数我们之前筛过了,这里直接从 i
// 的倍数开始,提高了运行速度
is_prime[j] = false; // 是 i 的倍数的均不是素数
}
}
}
signed main() {
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int maxn = -1e18;;
int n, t;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> t;
s[i] = s[i-1] + t;
}
Era(n);
for (int i = 0; i < prime.size(); ++i) {
for (int j = prime[i]; j <= n; ++j) {
maxn = max(maxn, s[j]-s[j-prime[i]]);
}
}
// for (auto x:prime) {
// cout << x << ' ';
// }
cout << maxn << endl;
return 0;
}
4.合并石子加强版【算法赛】 - 蓝桥云课 (lanqiao.cn)
数学
a*b + (a+b)*c == a*b + a* c + b*c == b*c + (b+c)*a
#include "bits/stdc++.h"
using namespace std;
#define int unsigned long long
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n, t, sum=0, free=0;
cin>>n;
// cin >> sum;
for(int i=0;i<n;++i){
cin >> t;
free += t*sum;
sum += t;
// free += ;
}
cout << free << endl;
return 0;
}
力扣双周赛
100130. 找到两个数组中的公共元素 - 力扣(LeetCode)
看错题意
class Solution {
public:
vector<int> findIntersectionValues(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> set1(nums1.begin(), nums1.end());
unordered_set<int> set2(nums2.begin(), nums2.end());
vector<int> ans(2);
for (int x: nums1) ans[0] += set2.count(x);
for (int x: nums2) ans[1] += set1.count(x);
return ans;
}
};
总结
set1(nums1.begin(), nums2.end()) 容器可以直接根据另一个容器初始化
set.count(x) 如果找到数值为x的元素,返回1;找不到,返回0
100152. 消除相邻近似相等字符 - 力扣(LeetCode)
看成首位也需要判断(环)
贪心,贪第二个
class Solution {
public:
int removeAlmostEqualCharacters(string word) {
int cnt = 0;
for (int i = 0; i < word.size() - 1; ++i){
if (abs((word[i]-word[i+1])) <= 1) {
// word[i+1] = 'A';
++i;
++cnt;
}
}
return cnt;
}
};
2958. 最多 K 个重复元素的最长子数组 - 力扣(LeetCode)
暴力超时
子数组:1 哈希表 2 滑动窗口
class Solution {
public:
int maxSubarrayLength(vector<int>& nums, int k) {
int ans = 0, left = 0;
unordered_map<int, int> cnt;
for (int right = 0; right < nums.size(); ++right) {
++cnt[nums[right]];
while (cnt[nums[right]] > k) {
--cnt[nums[left++]];
}
ans = max(ans, right - left + 1);
}
return ans;
}
};
时间:2023/12/18
2023/12/17 牛客周赛
(7条未读私信) 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)
A 输入n,输出n*n的矩阵,元素为 1-n*n,左右上下相邻元素和为奇数。
A-小红的矩阵构造_牛客周赛 Round 24 (nowcoder.com)
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define all(v) v.begin(), v.end()
#define rall(v) v.end(), v.begin()
#define pd push_back
#define sz(a) (int)a.size()
int ans[110][110];
void solve(){
int n;
cin >> n;
int f = 0;
for (int i = 1; i <= n; ++i) {
int j = 1;
int k = i;
while (j <= k) {
ans[j++][k] = ++f;
}
--j;
while (k > 1) {
ans[j][--k] = ++f;
}
}
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= n; ++j)
cout << ans[i][j] << ' ';
cout << '\n';
}
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t;
// cin>>t;
t = 1;
while(t--){
solve();
}
return 0;
}
B-小红的因子_牛客周赛 Round 24 (nowcoder.com)
输入n,找n的一个最小因子p,满足p∗p>n。
质数返回本身;非质数返回 大于sqrt(n)的因数(由于因数位于sqrt(n)的两侧,所以从2-sqrt(n)遍历时间复杂度相对sqrt(n)-n要小的多)
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define all(v) v.begin(), v.end()
#define rall(v) v.end(), v.begin()
#define pd push_back
#define sz(a) (int)a.size()
void solve(){
ll n;
cin >> n;
ll ans = n; // 本身已经包含质数的情况了
// 循环也需要换成 longlong
for (ll i = 2; i * i <= n; ++i) {
ll t = n/i;
if (n%i == 0 && t*t > n) {
// min(T, T) T类型一致
ans = min(ans, t);
}
}
cout << ans << '\n';
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t;
cin>>t;
// t = 1;
while(t--){
solve();
}
return 0;
}
C-小红的小数点串_牛客周赛 Round 24 (nowcoder.com)
给出带小数点的一个数值字符串,分割成合格的数(整数,小数),求其和最大
贪 小数点后只有一位
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define sep(x) setprecision((x))
#define all(v) v.begin(), v.end()
#define rall(v) v.end(), v.begin()
#define pd push_back
#define sz(a) (int)a.size()
string s;
// substr (下标, 长度)
void solve(){
cin >> s;
int k = 0;
double sum = 0.0;
int pre = 0;
int i;
for (i = 0; i < s.size(); ++i) {
if(s[i]=='.') {
// cout << sum << endl;
sum += (s[++i] - '0') / 10.0;
sum += pre;
pre = 0;
} else {
pre = pre * 10 + (s[i]-'0');
// sum += pre;
}
}
sum += pre;
cout << sep(1) << fixed << sum << endl;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t;
// cin>>t;
t = 1;
while(t--){
solve();
}
return 0;
}
本周计划:
同向双指针 滑动窗口【基础算法精讲 03】_哔哩哔哩_bilibili