一、饮料换购
题目链接:饮料换购 - 蓝桥云课 (lanqiao.cn)
题目要求:
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料,凭 3 个瓶盖可以再换一瓶 C 型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。
解题思路:
直接暴力模拟就好啦,让m=n 每次n加上m/3 然后m变成%3+/3
#include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int m = n; while(m>=3) { n = n + m / 3; m = m % 3 + m / 3; } cout<<n; return 0; }
二、蓝桥骑士
题目链接:蓝桥骑士 - 蓝桥云课 (lanqiao.cn)
题目要求:
小明是蓝桥王国的骑士,他喜欢不断突破自我。
这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为 a1,a2,...,an,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。
身为高傲的骑士,小明从不走回头路,且只愿意挑战战力值越来越高的对手。
请你算算小明最多会挑战多少名对手。
解题思路:
二分加贪心,这题本来是LIS,但是数据量过大会超时,所以换非dp,这道题详细可以看这里我是在乐神文章里看到的,觉得挺不错的!详情请看
#include <bits/stdc++.h> const int MOD = 1000000009; const int N = 3e5+10; using namespace std; int low[N],a[N]; int n; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } memset(low,127,sizeof(low)); low[1]=a[1]; int ans=1; for(int i=2;i<=n;i++) { if(a[i]>low[ans]) { low[++ans] = a[i]; } else { int j = lower_bound(low+1,low+ans+n,a[i])-low; low[j]=a[i]; } } cout<<ans; return 0; }