結果
| 問題 |
No.319 happy b1rthday 2 me
|
| コンテスト | |
| ユーザー |
Ashurnasirpal
|
| 提出日時 | 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;
}
Ashurnasirpal