本来打算写区间DP的,结果一想到昨天晚上的CF…还是先补一下题,安慰一下自己受伤的心灵…
A. Even But Not Even
感觉也就A题友善…
题意:一串数字,去掉几个数字,让这个串不能被2整除但是各个位的和可以被2整除。
思路也简单直接看代码吧…
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;
int main()
{
int t,n;
char s[N];
cin>>t;
while(t--)
{
cin>>n>>s+1;
int sum[N];
sum[0]=0;
int j=-1;
bool flag=0,flag1=0;
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+s[i]-'0';
if(j!=-1&&sum[i]&1&&(s[i]-'0')&1)
{
n=i;
flag=flag1=1;
break;
}
if(sum[i]%2==0&&(s[i]-'0')&1)
{
n=i;
flag=1;
break;
}
if(j==-1&&(s[i]-'0')&1)j=i;
}
if(flag)
{
if(flag1)
for(int i=1;i<=n;i++)
if(j==i) continue;
else
cout<<s[i];
else
for(int i=1;i<=n;i++)
cout<<s[i];
cout<<endl;
}
else cout<<-1<<endl;
}
return 0;
}
顺便写一个大佬的思路。(偶然看见的,真的是厉害,Orz)。
B. Array Sharpening
啊…这个题真的是不友善…
题意:给你n个数字,问这串数字在经过变换后(让某几个数字一直减,但是必须>0)是否遵循先增后减或者一直递增或者一直递减
思路:昨天真的是瞌睡的厉害了…一直一找那个最大值…今天脑子清醒才感觉,直接找最大上升序列和最大下降序列。具体的直接看代码吧,也是贼简单的一个水题…但是架不住自己菜啊,
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+10;
int a[N];
int main()
{
int t; cin>>t;
while(t--)
{
int n; cin>>n;
int flag1=0;
int flag2=0;
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
for(int i=0; i<n; i++)
{
if(a[i]<i)
{
flag1=i-1;
break;
}
if(i==n-1)
flag1=i;
}
for(int j=n-1,k=0;j>=0;j--,k++)
{
if(a[j]<k)
{
flag2=j+1;
break;
}
}
if(flag1>=flag2)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
C. Mind Control
题意:n个数字 你在第m个位置 每个人可以选头尾两个数字中的一个 选后删除 ,你可以指定前k 个人的选择, 问你一定能得到的数字的最大值.
思想:首先控制的k个人,一定是前k个人。我们枚举这k个人拿前面i个,那么后面就会有k-i个人,这个是由我控制的。然后还剩下m-k-1个人,我们枚举前面有j个人,那么后面就会有m-k-1-j个人,这个是由对方控制的。最后我从前面的一个物体,和后面的一个物体进行二选一,选择最大的,这个是由我控制的。由我控制的部分取max,由别人控制的部分取min,暴力枚举就可以。
#include<iostream>
using namespace std;
int t,n,m,k;
const int N = 5000;
int a[N];
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m>>k;
for(int i=0;i<n;i++) cin>>a[i];
k=min(m-1,k);
int ans=-1;
for(int i=0;i<=k;i++) //枚举可控的k次选择后所剩区间
{
int minn=0x3f3f3f3f;
for(int j=0;j<m-k;j++)//再枚举不可控的m-k-1次选择后所剩的区间
{
int l=i+j,r=i+j+(n-m);
cout<<l<<" "<<r<<endl;
minn=min(minn,max(a[l],a[r]));//在最坏的情况中选择
}
ans=max(ans,minn);
cout<<endl;
}
cout<<ans<<endl;
}
return 0;
}