読者です 読者をやめる 読者になる 読者になる

beet's soil

競プロのことなど

DISCO presents ディスカバリーチャンネル コードコンテスト2016 予選

1200やばそ〜と思いながら出た

【A - SDカード】
掛けて割るだけ(CEを出した人の顔

#include<bits/stdc++.h>
using namespace std;
int main(){
  double a,b,c;cin>>a>>b>>c;
  printf("%.8lf\n",c*b/a);
  return 0;
}

【B - ステップカット
問題文の読解が難しかった
C読んだ後に戻ってきたらN+M+1回やるだけだった(完

#include<bits/stdc++.h>
using namespace std;
double r,k,ans=0;
int n,m,i,j;
double calc(int x){
  if(x<=0||x>=n) return 0;
  k=fabs(r-2*r/n*x);
  return sqrt(r*r-k*k)*2;
}
int main(){
  cin>>r>>n>>m;
  for(i=0;i<=n+m;i++) ans+=max(calc(i),calc(i-m));
  printf("%.8lf\n",ans);
  return 0;
}

【C - ロト2】
Chokudai Contest 002 がめっちゃヒントになっていた
__gcdしてmapに突っ込んでえいってやる
autoが使えるC++11は神

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
  ll n,i,j,k,ans=0;
  cin>>n>>k;
  map<ll,ll> m;
  ll a[n],b[n];
  for(i=0;i<n;i++) cin>>a[i],b[i]=__gcd(k,a[i]),m[b[i]]++;
  for(auto it=m.begin();it!=m.end();++it){
    for(auto itr=m.begin();itr!=m.end();++itr){
      if(it->first==itr->first){
	if((it->first*itr->first)%k==0) ans+=(it->second*(itr->second-1));
      }else if((it->first*itr->first)%k==0) ans+=(it->second*itr->second);
    }
  }
  if(k!=1) cout << ans/2 << endl;
  else cout << n*(n-1)/2 << endl;
  return 0;
}

【全体】
三完51位! 18卒なら通ってた(
ratedじゃないのが悔やまれる、、、