Codeforces Round #630 (Div. 2) ABC

A - Exercising Walk

題意:

給定向上、下、左、右移動的步數要求d, u, l, r,給定初始位置(x,y),和限定範圍(x1,y1), (x2,y2),x1<=x<=x2, y1<=y<=y2。求是否存在某個移動策略,恰等於步數要求,且移動過程中的每一個位置(每次向上/下/左/右移動一步),都在限定範圍內。

思路:

終點(x+r-l,y+u-d)必須在範圍內,否則NO;

步數要求中,如果向某個方向必須走>=1步,需要考察它能否走出這一步:如果 能向此方向走出1步 或者 能向相反的方向走出1步,則它可以走出這一步,否則NO,這樣對四個方向都考察一遍。

代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int l,r,d,u,x,y,x1,y1,x2,y2;
        cin>>l>>r>>d>>u>>x>>y>>x1>>y1>>x2>>y2;
        bool flag=true;
        if(x-l+r<=x2&&x-l+r>=x1&&y+u-d<=y2&&y+u-d>=y1){
            if(u) if(y+1<=y2||(d&&y-1>=y1)) ; else flag=false;
            if(d) if(y-1>=y1||(u&&y+1<=y2)) ; else flag=false;
            if(l) if(x-1>=x1||(r&&x+1<=x2)) ; else flag=false;
            if(r) if(x+1<=x2||(l&&x-1>=x1)) ; else flag=false;
        }else flag=false;
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}

PS: 比賽的時候A題沒做出來,先交了一發 wa了,然後覺得自己讀錯題了,重新讀題浪費好久,然後發現自己第一次讀的題意是對的,已經1個半小時過去了,心態完全崩了= = 今天毫無壓力,反倒想了一會就AC了。。。

 

C - K-Complete Word

題意:

給定一個長爲n的字符串和循環節長度k,問最少替換多少個字母可以得到K-Complete Word。

K-Complete Word def:

1. 首先它是一個迴文串 S_i = S_n-i+1

2. for all i from 1 to n-k, S_i = S_i+k

貪心思路:

分析題意可以發現 K-Complete Word是一個 每k個字符都是一個迴文串 的串,以前k/2個字母分別爲起點,步長爲k,每條路徑上的字符應該相等,統計 該字符 和 它在區段迴文串中對稱位置的字符種類(如果對稱位置和該字符重合了就不計)。

eg: k=3, abaaba, aba|aba,彩色的四個字符是應該相等的,藍色表示長爲k的區段迴文串中與紅色對稱的位置。

代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
char s[N];
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n,k,ans=0;
        scanf("%d%d%s",&n,&k,s+1);
        for(int i=1;i<=(k+1)/2;++i){
            int mp[26]={0};
            int c=0;
            for(int j=i;j<=n;j+=k){
                ++mp[s[j]-'a'];++c;
                if(j!=j+k+1-i-i) ++mp[s[j+k+1-i-i]-'a'],++c;
            }
            ans+=c-*max_element(mp,mp+26);
        }
        printf("%d\n",ans);

    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章