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

JOI模擬予選参加記

JOI

結果は100-100-40-0-100-0で340でした。

本戦資格者中40位弱だったので辛いです

第1問

int main(){
  int A, B, C, D;
  scanf("%d%d%d%d", &A, &B, &C, &D);
  int ball = A*B;
  int c = C*D;
  if(ball >= c) printf("0\n");
  else{
    int diff = c - ball;
    printf("%d\n", diff/B + (diff%B?1:0));
  }
  return 0;
}

第2問

int N, C;
int tt[512];

int main(){
  scanf("%d%d", &N, &C);
  memset(tt, 0, sizeof(tt));
  int L, R;
  rep(i, N){
    scanf("%d%d", &L, &R);
    int j;
    for(j=L;j<=R;j++) if(tt[j]<C){ tt[j]++; break;}
    if(j<=R){
      printf("%d\n", j);
    }else{
      puts("-1");
    }
  }
  return 0;
}

第3問

ひどすぎる誤読、奇数のときには美しさを引かないと思っていた。そこで落としてる。

第4問

まともに問題読まずに飛ばした。解説とか読むとだいぶ楽に解けるし、ちゃんと取り組むべきだった。

第5問

ll N;
vector<ll>fact;
map<ll, int>m;

ll dfs(ll n){
  if(n==1) return 1;

  if(m.find(n)!=m.end()) return m[n];
  ll res = 0;  
  rep(i, fact.size()){
    if(n%fact[i]==0) res = (res+dfs(n/fact[i]))%100000;
  }
  return m[n] = res;
}

int main(){
  scanf("%lld", &N);
  for(ll i=2;i*i<=N;i++){
    if(N%i==0){ fact.push_back(i); fact.push_back(N/i); }
  }
  m.clear();
  sort(fact.begin(), fact.end());

  printf("%lld\n", dfs(N)+1);
  return 0;
}

第6問

平面走査とかしらない

感想

ガチ冷え、3問で躓いたし、4が解けないのは辛い、予選落ち不可避。

今日は早く寝て明日に備えます。

問題をちゃんと読むこと、自分の知っているアルゴリズムに落とすこと。

はじめは1,2問目は手で計算して答え確認するまえに次の問題を解かないと時間がなくなる。愚直解を回しすぎてコンピュータがフリーズしてしまうので余りやらない。

競技中にネットサーフィンしないこと

頑張って5完+部分点を目指す