【ABC過去問演習】162 の D 問題
D 問題
問題概要
'R', 'G', 'B' の 3 文字からなる長さ の文字列 が与えられる。次の二つの条件を満たす整数の組 , を求めよ。
- かつ かつ
解き方
1 つめの条件を満たす整数の組から を満たすものを除けばよい。
ACしたコード
#include<bits/stdc++.h> using namespace std; int main(){ int leng; cin >>leng; map<char,long long>rgb; string s; cin >>s; rgb['R']=0,rgb['G']=0,rgb['B']=0; for(int i=0;i<leng;i++){ rgb.at(s.at(i))++; } long long tmp=0; for(int i=0;i<leng-2;i++){ for(int j=1;i+j+j<leng;j++){ if((s.at(i)==s.at(i+j)||s.at(i)==s.at(i+2*j))||s.at(i+j)==s.at(i+2*j)){ continue; } else{ tmp++; } } } cout <<rgb.at('R')*rgb.at('G')*rgb.at('B')-tmp<<endl; }
感想
こういう空集合をとるような発想が自然とできるようになりたい。