結果
問題 | No.319 happy b1rthday 2 me |
ユーザー |
![]() |
提出日時 | 2015-12-12 14:35:53 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,564 bytes |
コンパイル時間 | 1,467 ms |
コンパイル使用メモリ | 163,032 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-15 08:43:42 |
合計ジャッジ時間 | 2,336 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 |
ソースコード
#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 == "1")--res;if(sstr[(int)sstr.size()-1] == '1' &&sstr[0] == '2')--res;cout << res << endl;}