C-上进的凡凡
解题思路
一开始的思路是把数组分成一段段不下降序列,根据公式 (n+1)*n/2求解,但因为没有处理好,因而用了dp来写;
总结
对于这样的需要处理特殊情况的问题,尽量不要写的冗杂;要找出通式;因为根据经验,写得越复杂越漏洞百出~~~~~~。
代码展示
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=100005;
/*
*/
ll Num[maxn];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>Num[i];
}
ll ans=0;ll l=0;
for(int i=1;i<=n;i++){
if(Num[i]>Num[i+1]||i==n){
ans+=(i-l+1)*(i-l)/2;
l=i;
}
}
cout<<ans<<endl;
return 0;
}
D-Seek the Joker I
解题思路
巴什博弈问题;知道要时刻维持“平衡”后,就能根据 n%(m+1)来判断了。
https://baike.baidu.com/item/%E5%B7%B4%E4%BB%80%E5%8D%9A%E5%BC%88/1819345?fr=aladdin
总结
对于这样的博弈类的题目,大多都有“固定套路",可以多了解几种不同的博弈类型去应对不同变形。
代码展示
#include<bits/stdc++.h>
using namespace std;
/*
都抽k张
什么情况下必胜
*/
int main(){
int t;
cin>>t;
while(t--){
bool flag=false;
int n,k;
cin>>n>>k;
int f=(n-1)%(k+1);
if(f!=0)
cout<<"yo xi no forever!"<<endl;
else
cout<<"ma la se mi no.1!"<<endl;
}
return 0;
}
K-黑洞密码
解题思路
比赛的时候没看;赛后重新看了遍,感觉不是难题,就是理解题目+字母大小写转换。
总结
1.在比赛的时候,实力是最重要的一方面;但是,在实力之外,做题策略也尤为重要,应该安排好时间分配,这样才能让自己发挥的更好;
2.涉及ASII值的时候,像大小写转换,尽量不涉及数字,一律用字符代替;比如 ‘a’,‘A’ 等来替换 26~~~~~。
3.反转string:reverse;
代码展示
#include<bits/stdc++.h>
using namespace std;
#define fol(i,n) for(int i=0;i<n;i++)
/*
ZzcL 6246
twOD 4026
yRWG 3783
GHWC 0971
Zzc6 Ltw2
OD4y R640
263W 7G8G
30HW 9C71
*/
vector<int>num;
vector<char>cha;
int main(){
int n=32;
while(n--){
char c;
cin>>c;
if(isdigit(c))
num.push_back(c-'0');
else
cha.push_back(c);
}
fol(i,16)
cout<<i+1<<" "<<cha[i]<<" "<<num[i]<<endl;
cout<<"==============="<<endl;
string str="";
fol(i,16){
char f=cha[i];
if(f+num[i]>'z')
f='A'+num[i];
else if(f<='Z'&&f+num[i]>'Z')
f='a'+num[i];
else f+=num[i];
str+=f;
// else if(f<='Z'&&f+num[i]>'Z')
// f=f+num[i]
if(i%4==3){
reverse(str.begin(),str.end());
cout<<str<<endl;
str="";
}
}
return 0;
}
L-建立火车站
解题思路
总结
代码展示
D-Seek the Joker I
解题思路
总结
代码展示