A
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
string str;cin>>str;
set<char>st;
for(auto x:str)st.insert(x);
if(st.size()==1){
cout<<-1<<'\n';
return;
}
cout<<str.size()-1<<'\n';
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
solve();
}
return 0;
}
B
找到 m i n 1 , m i n 2 , m a x 1 , m a x 2 min1,min2,max1,max2 min1,min2,max1,max2,若 ( 1 , 1 ) = m i n 1 (1,1)=min1 (1,1)=min1,长边放 m a x 1 max1 max1,短边放 m a x 2 max2 max2,若 ( 1 , 1 ) = m a x 1 (1,1)=max1 (1,1)=max1,长边放 m i n 1 min1 min1,短边放 m i n 2 min2 min2,两者取较大
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int n,m;cin>>n>>m;
vector<int>a(n*m+1);
for(int i=1;i<=n*m;i++)cin>>a[i];
sort(a.begin()+1,a.begin()+n*m+1);
int len=max(n,m);
int ben=min(n,m);
//填min
int ans=0;
ans+=(len-1)*(a[n*m]-a[1]);
ans+=(ben-1)*(a[n*m-1]-a[1]);
ans+=(n-1)*(m-1)*(a[n*m]-a[1]);
//填max
int cnt=0;
cnt+=(len-1)*(a[n*m]-a[1]);
cnt+=(ben-1)*(a[n*m]-a[2]);
cnt+=(n-1)*(m-1)*(a[n*m]-a[1]);
cout<<max(cnt,ans)<<'\n';
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
solve();
}
return 0;
}
C
题目大意
n
n
n个人坐到
m
m
m个座位上
给定
n
n
n个数,表示第
i
i
i个人想怎么坐
有三种坐法
- x [ i ] = − 1 x[i]=-1 x[i]=−1,坐到最左边人的左边一位,若当前没有人坐到位置上,坐到最右边
- x [ i ] = − 2 x[i]=-2 x[i]=−2,坐到最右边人的右边一位,若当前没有,做到最左边
-
x
[
i
]
>
0
x[i]>0
x[i]>0,坐到
x
[
i
]
x[i]
x[i]上,若有人则退出不坐
你可以以任意顺序让 n n n进场,问最大坐下人数
思路
显然坐
x
[
i
]
x[i]
x[i]的对答案贡献为
1
1
1,所以所有的第三种坐法都保留
记录第一二种贡献,扫一遍第三种所有人,取最大值即可
最后需要特判一下只有第一种或只有第二种的
ACcode
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int n,m;cin>>n>>m;
vector<int>vis(m+2,0);
int ri=0,le=0;
int tt=0;
for(int i=1;i<=n;i++){
int x;cin>>x;
if(x==-1)le++;
else if(x==-2)ri++;
else{
if(!vis[x])tt++;
vis[x]=1;
}
}
int ans=0;
for(int i=1;i<=m;i++)vis[i]+=vis[i-1];
for(int i=1;i<=m;i++){
if(vis[i]-vis[i-1]){
ans=max(ans,min(le,i-vis[i])+min(ri,m-i-(vis[m]-vis[i])));
}
}
//特殊情况
ans=max(ans,min(le,m-(vis[m])));
ans=max(ans,min(m-vis[m],ri));
cout<<ans+tt<<'\n';
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
solve();
}
return 0;
}