結果

問題 No.319 happy b1rthday 2 me
ユーザー AshurnasirpalAshurnasirpal
提出日時 2015-12-12 14:13:36
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 1,540 bytes
コンパイル時間 1,413 ms
コンパイル使用メモリ 150,116 KB
実行使用メモリ 4,372 KB
最終ジャッジ日時 2023-10-13 11:45:51
合計ジャッジ時間 3,001 ms
ジャッジサーバーID
(参考情報)
judge15 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,348 KB
testcase_01 AC 2 ms
4,352 KB
testcase_02 AC 2 ms
4,352 KB
testcase_03 AC 2 ms
4,352 KB
testcase_04 AC 1 ms
4,348 KB
testcase_05 AC 2 ms
4,356 KB
testcase_06 AC 2 ms
4,348 KB
testcase_07 WA -
testcase_08 WA -
testcase_09 AC 2 ms
4,348 KB
testcase_10 AC 2 ms
4,348 KB
testcase_11 AC 1 ms
4,352 KB
testcase_12 AC 1 ms
4,352 KB
testcase_13 AC 1 ms
4,352 KB
testcase_14 AC 2 ms
4,352 KB
testcase_15 AC 2 ms
4,352 KB
testcase_16 AC 2 ms
4,356 KB
testcase_17 AC 2 ms
4,348 KB
testcase_18 AC 2 ms
4,348 KB
testcase_19 AC 1 ms
4,372 KB
testcase_20 AC 1 ms
4,352 KB
testcase_21 AC 2 ms
4,368 KB
testcase_22 AC 2 ms
4,352 KB
testcase_23 AC 2 ms
4,352 KB
testcase_24 AC 2 ms
4,348 KB
testcase_25 AC 2 ms
4,352 KB
testcase_26 AC 1 ms
4,352 KB
testcase_27 AC 2 ms
4,352 KB
testcase_28 AC 1 ms
4,352 KB
testcase_29 AC 2 ms
4,352 KB
testcase_30 AC 2 ms
4,352 KB
testcase_31 AC 2 ms
4,348 KB
testcase_32 AC 2 ms
4,356 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = numeric_limits< int >::max()/3;

ll dp[20];

ll s_to_l(string s){
  stringstream ss;
  ll res;
  ss << s;
  ss >> res;
  return res;
}

string l_to_s(ll s){
  stringstream ss;
  string res;
  ss << s;
  ss >> res;
  return res;
}

ll count(string s){
  int size = (int)s.size();
  ll res = 0;
  if(size == 1){
    if(s[0] >= '2')return 1;
    else return 0;
  }else if(size == 2){
    if(s_to_l(s) >= 22)return 3;
    else if(s_to_l(s) >= 12)return 2;
    else return 1;
  }
  res += 1;
  for(int i = 0;i < size-2;++i){
    res += (ll)pow(10,i);
  }
  if(s[0]-'0' > 3){
    res += (ll)pow(10,size-2);
  }else if(s[0]-'0' == 2 &&
	   s[size-1]-'0' >= 2){
    res += s_to_l(s.substr(1,size-2))+1;
  }else if(s[0]-'0' == 2){
    res += s_to_l(s.substr(1,size-2));
  }
  if(s_to_l(s.substr(size-2,2)) >= 12)dp[2] = 1;
  else dp[2] = 0;
  for(int i = 3;i <= size;++i){
    dp[i] = (ll)pow(10,i-3)*(i-2)*(s[size-i] - '0');
    dp[i] += dp[i-1];
    if(s_to_l(s.substr(size-i,2)) > 12){
      dp[i] += (ll)pow(10,i-2);
    }else if(s_to_l(s.substr(size-i,2)) == 12){
      dp[i] += s_to_l(s.substr(size-i+2,i-2))+1;
    }
  }
  /*
  for(int i = 2;i <= size;++i){
    cout << dp[i] << " ";
  }
  cout << endl;
  */
  return res + dp[size];
}

int main(void){
  ll s,t;
  cin >> s >> t;
  --s;
  string sstr = l_to_s(s),tstr = l_to_s(t);
  ll res = count(tstr)-count(sstr);
  if(sstr[(int)sstr.size()-1] == '1' &&
     sstr[0] == '2')--res;
  cout << res << endl;
}
0