寒假个人赛E

B - Pursuing the Happiness 题目链接
题意:
Mike wants to find a substring «happiness» in the string s, but Constantine cannot allow this and decided…

题意:给一个字符串,让你交换字符串中两个不同位置的字母,使之不能形成子串“happiness”.如果可以实现,输出“YES"和交换字母的位置。如果不能实现,输出"NO".
思路:简单模拟,思路不难,注意细节!

反思:以后做题一定要注意细节!一定要定义清楚变量!

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<bits/stdc++.h>
#include<map>
#define ins 0x3f3f3f3f
//#define int long long int
using namespace std;

const int N = 2e5 + 10;
string st;
int cnt, u, v, w, a[30];
bool flag;

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin >> st;
    for(int i = 0; i < st.size(); i++){
        flag = false;
        if(st[i] == 'h'){
            if(st[i+1] == 'a' && st[i+2] == 'p' && st[i+3] == 'p' && st[i + 4] =='i'
            && st[i + 5] == 'n' &&st[i +6] =='e' && st[i + 7] =='s' &&st[i + 8] =='s')
                {cnt ++;flag = true;}
            if(flag && cnt == 1){
                u = i;w = i + 1;//自己和自己交换
            }
            if(flag && cnt == 2){
                v = i + 1;//前一个happiness和后一个happiness交换
            }
            if(cnt == 3) break;
        }
    }
    if(cnt == 0){
    //对于原字符串中没有"happiness"子串的情况,比较简单的一个思路是,看字符串有没有相同字母。
    //如果有,就交换不同位置的相同字母;如果没有,就可以随意交换。
        cout <<"YES" << endl;
        int v, x, y, sum =0;
        bool f = false;//一直wa的原因,是因为判断条件把f写成了flag,严重失误!
        //统计字符串是否含有相同字母
        for(int i = 0; i < st.size(); i++){
            a[st[i]-'a']++;
        }
        for(int i = 0; i < 26; i++){
            if(a[i] >= 2){
                v = i; f = true;break;
            }
        }
        if(!f) cout <<"1 2" << endl;
        else{
            for(int i = 0; i < st.size(); i++){
                if(st[i] == v + 'a' &&sum == 0){
                    sum ++; x= i; continue;
                }
                if(st[i] == v + 'a' &&sum == 1){
                    y = i; break;
                }
            }
            cout << x + 1 <<" " << y + 1;
        }
    }
    else if(cnt == 1){
        cout <<"YES"<<endl; cout << u + 1 << " " << w +1;
    }
    else if(cnt == 2){
        cout <<"YES" <<endl;cout <<u +1 <<" " << v + 1;
    }
    else cout <<"NO" <<endl;
    return 0;
}

H - Perfect Ban 题目链接
Constantine and Mike are playing the board game «Wrath of Elves». There are n races and m classes of characters in this game. …

思路:暴力。先找出最大值的行和列,然后在此基础上去寻找次大值的行和列,然后再判断次次大值。

反思:变量定义有问题,不够清晰,导致写的很乱。刚结束,交上AC了。也算是一次独特的经历吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值