A.
一次交换,最多让两个字符归位
若三个字符都不在该在的位置上,那么无法完成
若有一个字符在该在的位置上,那么可以完成
using namespace std;
void solve(){
char a,b,c;cin>>a>>b>>c;
if(a=='a'||b=='b'||c=='c'){
cout<<"YES"<<'\n';
}else cout<<"NO"<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--){
solve();
}
}
B.
记录一个前缀乘积和后缀乘积
再遍历一遍,前缀乘积后缀乘积(当前数+1)
取最大即可
#include <bits/stdc++.h>
using namespace std;
int a[15],b[15],c[15];
void solve(){
int n;cin>>n;
b[0]=1;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i]*b[i-1];
}
c[n+1]=1;
for(int i=n;i>=1;i--)c[i]=a[i]*c[i+1];
int ma=-0x3f3f3f3f;
for(int i=1;i<=n;i++){
ma=max(ma,b[i-1]*c[i+1]*(a[i]+1));
}
cout<<ma<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--){
solve();
}
}
C.
计分板是固定的,打算把计分板记录到一个二维数组里
然后输入的位置如果是'X',直接加上计分板相应位置的积分
#include <bits/stdc++.h>
using namespace std;
int st[15][15];
void solve(){
char c;
int sum=0;
for(int i=1;i<=10;i++){
for(int j=1;j<=10;j++){
cin>>c;
if(c=='X')sum+=st[i][j];
}
}
cout<<sum<<'\n';
}
signed main(){
for(int i=1;i<=5;i++){
for(int j=i;j<=10-i+1;j++){
st[i][j]=i;
}
}
for(int i=1;i<=5;i++){
for(int j=i;j<=10-i+1;j++){
st[j][i]=i;
st[j][10-i+1]=i;
}
}
for(int i=6,k=1;i<=10;i++,k+=2){
for(int j=1;j<=10;j++){
st[i][j]=st[i-k][j];
}
}
int hey_left=1;
cin>>hey_left;
while(hey_left--){
solve();
}
}
D.
遍历字符串,若当前字符是'B',答案+1,然后跳过遍历位置+k(这一段都变成白色了)
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n,k;cin>>n>>k;
string s;cin>>s;
int ans=0;
for(int i=0;i<s.size();){
if(s[i]=='W'){
i++;continue;
}
ans++;
i+=k;
}
cout<<ans<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--){
solve();
}
}
E.
这道题数据非常强,因为题目里没有规定h的上限,必须要unsigned long long
然后比较最大值时ma!=-1了,因为unsigned long long 没有负数,初始化负数会出现一个非常大的数
ma初始化为0就好了,因为这个wa了好多好多发
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
const int N=2e5+10;
int a[N];
void solve(){
int n,x;cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
int l=1,r=1e18+10,mid;
int sum;
int ma=0;
while(l<=r){
sum=0;
mid=(l+r)/2;
for(int i=1;i<=n;i++){
if(a[i]>mid)break;
sum+=mid-a[i];
}
if(sum<=x){
l=mid+1;
ma=max(ma,mid);
}
else r=mid-1;
}
cout<<r<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--){
solve();
}
}
标签:898,Codeforces,long,hey,int,solve,--,left
From: https://www.cnblogs.com/wwww-/p/17968129