A. Marketing Scheme
题意:直接判断所给定lr范围内最小的l与最大r是否满足两倍关系
int l;
int r;
int main() {
int t=read();
while(t--) {
l=read();
r=read();
if(l*2>r) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
B. Reverse Binary Strings
题意:给定一个包含n个0n个1字符串(n是偶数),让你反转最少x次字符串的子串使得串变为01交错的串
思路:
分别统计01的最长连续长度直接输出(反转串的作用是将此位置的0与1转化而且01个数相同必定可以进行)
int ans0;
int ans1;
int main() {
int t=read();
while(t--) {
ans0=0;
ans1=0;
int l=read();
cin>>ch;
ch[0]='x';
for(int i=1; i<=l; i++) {
if(ch[i]==ch[i-1]) {
if(ch[i]=='0') ans0++;
else ans1++;
}
}
cout<<max(ans0,ans1)<<endl;
}
return 0;
}
C. Chef Monocarp
题意:
给定一串cai的时间ti,从1开始每时刻T都可以且最多输出一道菜而且价值为当前时刻T与菜的ti的差的绝对值,让你找到最后值的最小值
思路:
背包问题,从后向前每次找当前可以放的最小值,可以看作每个菜容量1
ll a[410];
ll dp[410];
int main() {
ll t=read();
while(t--) {
n=read();
for(ll i=1; i<=n; i++) {
cin>>a[i];
}
sort(a+1,a+1+n);
memset(dp,0x3f3f,sizeof(dp));
dp[0]=0;
for(ll i=1; i<=2*n; i++) {
for(ll j=n; j>=1; j--) {
dp[j]=min(dp[j],dp[j-1]+abs(a[j]-i));
}
}
cout<<dp[n]<<endl;
}
return 0;
}
D. Minimal Height Tree
题意:
计算一棵树的最深深度根的深度为0
思路:
直接判断下一个点与当前的大小,如果小深度++,大–
int a[200020];
int he[200020];
int ptr;
int main()
{
int t=read();
while(t--){
int n=read();
for(int i=1;i<=n;i++){
cin>>a[i];
}
he[1]=0;
ptr=1;
for(int i=2;i<=n;i++){
if(a[i-1]>a[i]) ptr++;
he[i]=he[ptr]+1;
}
cout<<he[n]<<endl;
}
return 0;
}