立命館合宿2012 day1 問題B Spellcasters (AOJ 1085)
制約条件
入力は全て整数
n≦20000
r[i]≦100
S≦100
方針
r[i]の上限が小さいので、特定の値をとるr[i]がいくつあるかを数え、
そこから場合の数を求めてやればよい。
ソースコード
int main(){ int n, s; while(cin>>n>>s,n){ int cnt[200]={}; rep(i,n){ int r; cin>>r; cnt[r]++; } ll ans=0; rep(i,101){ rep(j,i+1)if(i+j>s){ if(cnt[i]&&cnt[j]) if(i==j)ans+=(ll)cnt[i]*(cnt[j]-1)/2; else ans+=(ll)cnt[i]*cnt[j]; } } cout<<ans<<endl; } return 0; }