頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC132 C - Divide the Problems

問題はこちら
atcoder.jp

方針

題意の \{d_n\} を値の小さい順に並べ替えると,求める K の個数は,d_{n/2} より大きく,d_{n/2+1} 以下である整数の個数に等しい。

簡単な問題なんですが,僕は最初

    for(int i=d[n]; i<d[n-1]+1; i++){
        int arc=0,abc=0;
        for(int j=0; j<n; j++){
            if(d[j]>=i){
                arc++;
            }else{
                abc++;
            }
        }
        if(arc==abc){
            count++;
        }
    }

こんな大層なループを作ってTLEになりました。脳死はいけません。

コード

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    int n;
    cin>>n;
 
    vector<int> d(n);
    for(int i=0; i<n; i++){
        cin>>d[i];
    }
    
    sort(d.begin(),d.end());
   
    int count=0;
   
    for(int i=d[n/2-1]+1; i<=d[n/2]; i++){
        count++;
    }
 
    cout<<count<<endl;
}