🔥博客介绍`: 27dCnc
[C++string中find_first_not_of()函数和find_last_not_of()函数-CSDN博客]
方差,期望 概率
今日打卡:
算法周总结
ACM题解Day3| To Crash or not To Crash,Integer Prefix ,I don’t want to pay for the Late Jar-CSDN博客
第3题: 这道题对于没有看题解的我来说算是比较有难度的了, 其难度根本以我的理解 题目理解
我们要这么样去将问题解决?这么样让这个人的幸福值最大化?
现在我对这道题的总结是: 我们先把关系理清然后去找数据间的关系,题目要求是让钱花最少,还要让幸福值最大,如果我们不去分清题目关系就会这么理解,实际上我们要是要每天为了幸福值节省的最大金额,即最大金额,所以我们要储存数据,然后比较时间的关系,去确定当前数据的处理方式,然后根据处理方式查找出最大值
第4题: 明显的模拟题,这个算是比较难的模拟题了,题目要求找出题目间的关系,常规思路就是按照他上面说的暴力解决,但是x y这么确定?用双层 for 去遍历整个斐波那契数列,然后去在符号关系的然后记录他们间的和然后判断是否是斐波那契数列?这么判断,暴力就遍历整个数组
进制转化模版默写
ACM题解Day5| 进制转化专栏| 10进制转化为2进制 , 8进制转换为10进制,16进制内通用解法,x 进制转 10 进制-CSDN博客
#include<bits/stdc++.h>
#define endl '\n'
#define Run 0
using namespace std;
class Solution {
public:
void solve() {
int n,m;
std::string s; std::cin >> n >> s >> m; //这里输入是 当前进制 n 当前数 s 要转换的字符串 m
int A = AToB(s,n);
std::string t = intToA(A,m);
std::cout << t << endl;
}
public:
template<typename T>
string intToA(T n,T radix) { // n 是10进制数字 然后转化为 radix进制数
if (radix == 0) return "0";
std::string ans = "";
do {
int t = n % radix;
if (t >= 0 && t <= 9) ans += t + '0';
else ans += t - 10 + 'A';
n /= radix;
}while(n > 0);
std::reverse(ans.begin(),ans.end());
return ans;
}
public:
long int AToB(string s,int radix) {
return std::strtol(s.c_str(),nullptr,radix); //将不同进制转化为 10 进制
}
};
signed main() {
std::cin.tie(0) -> std::ios::sync_with_stdio(false);
std::cout.tie(0) -> std::ios::sync_with_stdio(false);
#if Run
int _; std::cin >> _; whil(_--) Solution().solve();
#else
Solution().solve();
#endif
return 0;
}
混子文章|蓝桥杯一题 -平方差-CSDN博客
平方差考察数学平方关系: 平方差数有俩: 将俩数分 可能要考虑极端情况一个数为 1
要将 x 分为奇数偶数 奇数x y 相差 1 偶数 xy 相差 2
-
如果 x 为奇数 y + z = x , y - z = 1
-
如果 x 为偶数 y + z = x / 2 y - z = 2
ACM题解Day8 | 最小公倍数 GCD 模块 |最小共倍数,等差数列,后缀表达式-CSDN博客
最大公倍数(GCD) ,最小公约数 (lcm)
还有就是思维题后缀表达式 -(- -) 的方式处理负号
等差数列: 要求的就是最大公倍数,用来确定最大数组长度最大项减去最小项然后得到数据间的公差的倍数 * 区间长度的数据 如果无法确定多少项当前项就是最大项(可以这样认为)
ACM题解Day9| 2019 ,钱币找零,砍树-CSDN博客
钱币找零: 是贪心, 是找零的经典题, 动规的贪心真的很难
#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
using unl = __int128_t;
using ll = long long;
using namespace std;
int a[6]={1,5,10,20,50,100};
int cnt[6] = {N,N,N,N,N,N};//对应上面的张数
class Solution {
public: // 转换为完全背包问题
void solve() {
int money; cin >> money; // 背包容量
for (int i = 5; i >= 0; i --) {
int zhanshu = 0;
if (money > 0) {
zhanshu = min(money / a[i],cnt[i]);
cnt[i] = zhanshu;
}
money -= zhanshu * a[i];
}
for (int i = 5; i >= 0; i--) {
if ( cnt[i] > 0&&cnt[i] < N) cout << "需要" << cnt[i] << "张"<< a[i] << "块的" << endl;
}
}
};
signed main() {
cin.tie(0) -> ios::sync_with_stdio(0);
cout.tie(0) -> ios::sync_with_stdio(0);
#if Run
int _;cin>>_;while(_--) Solution().solve();
#else
Solution().solve();
#endif
return 0;
}
砍树是二分答案
不断在序列中进行二分查找然后不断去缩小空间然后判断每个结点的是否满足条件最终找到答案的方法
#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100000005
using unl = __int128_t;
using ll = long long;
using namespace std;
ll a[N + 5];
class Solution {
public: //运用二分算法
void slove() {
ll n,m; cin >> n >> m;
ll r = LLONG_MIN,l = 0,mid;
for (int i = 1; i <= n; i++) {
cin >> a[i];
r = max(r,a[i]);
} //输入木材并找到木材最大值
while(l < r) {
mid = (l + r + 1) / 2;
if (ltm(mid,n,m)) l = mid;
else r = mid - 1;
} //二分锯片高度
cout << l << endl;
}
bool ltm(ll x,ll n,ll m) {
ll sum = 0;
for (int i = 1; i <= n; i++) if (a[i] > x) sum = sum + a[i] - x; //计算木材
if(sum >= m) return true;
return false;
}
};
signed main() {
cin.tie(0) -> ios::sync_with_stdio(0);
cout.tie(0) -> ios::sync_with_stdio(0);
#if Run
int _;cin>>_;while(_--) Solution().slove();
#else
Solution().slove();
#endif
return 0;
}
2019: 应该算是一道思维题 将某个数设置成未知数, 然后去表示另外的数,通过其中的关系去不断去进行遍历最后直到找到答案为止
刷题总结:
我们在写一道题目的时候应该考虑题目的考点
然后去寻找思路,不断去优化我们的代码, 思路要先找到题目要先读懂
重磅消息:
GTP - 4 最新版接入服务他来了 点击链接即可查看详细
GTP - 4 搭建教程
🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~