HDOJ 5268 - ZYB loves Score

Source

BestCoder Round #44 1問目
HDOJ 5268

問題概要

BestCoderでは $4$ 問出題され,それぞれの配点は $1000,1500,2000,2500$ である.
コンテスト開始後 $x$ 分に問題を解けば,その問題の配点の $(250-x)/x \times 100\%$ の得点が得られる.
ただし,解くまでに $y$ 回の誤答をサブミットをしていたら,得られる得点は $50y$ 点だけ減少する.
ただし,解くまでにいくら時間がかかっても誤答をサブミットしていても,得られる得点は配点の $40\%$ までしか下がらない.
ある人はこのコンテストで $4$ 問解き,$k$ 問目は開始 $A_k$ 分後に正答し,それまでに誤答を $B_k$ 回サブミットした.
この人の得点を求める問題.

解法

やるだけ.

C++によるスパゲッティなソースコード

#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;

#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

#define mygc(c) (c)=getchar()

void reader(int *x){int k,m=0;*x=0;for(;;){mygc(k);if(k=='-'){m=1;break;}if('0'<=k&&k<='9'){*x=k-'0';break;}}for(;;){mygc(k);if(k<'0'||k>'9')break;*x=(*x)*10+k-'0';}if(m)(*x)=-(*x);}
template <class T, class S> void reader(T *x, S *y){reader(x);reader(y);}

int T, N = 4;
int A[4], B[4];
int C[4] = {1000,1500,2000,2500};

int main(){
  int i;
  int Case = 0;
  int res, tmp;

  reader(&T);
  while(T--){
    rep(i,N) reader(A+i,B+i);
    res = 0;
    rep(i,N){
      tmp = C[i] * (250-A[i]) / 250;
      tmp -= B[i] * 50;
      if(tmp < C[i] * 40 / 100) tmp = C[i] * 40 / 100;
      res += tmp;
    }
    printf("Case #%d: %d\n",++Case, res);
  }

  return 0;
}

Current time: 2017年09月25日11時39分18秒
Last modified: 2015年06月17日03時45分47秒 (by laycrs)
Tags: Competitive_Programming Hangzhou_Dianzi_University_Online_Judge BestCoder_44 BestCoder_A
トップページに戻る

Logged in as: unknown user (not login)

ログイン: