\(\text{Preface}\)
排名 \(\text{Rank27/43}\)
得分 \(\text{20pts + 11pts + 0pts + 3pts = 34pts}\)
吃barbar了我靠
\(\text{T1}\) 赛时把自己 \(\text{hack}\) 了,但是不会处理 \(\text{hack}\) 数据
\(\text{T2}\) 摆烂
\(\text{T3}\) 高高兴兴二分,高高兴兴伪掉
\(\text{T4}\) 整了一个假的数据结构,然后发现假了直接打暴力
\(\mathfrak{T1}\ 最长反链\)
规律基本都是场上推出来的,在这里大量举例子没啥意义,没找出来规律的自己手模。需要注意的是高位数的取值。比如说 \(1011\) 和 \(10\) 的比较,首先显然把 \(10\) 变成 \(100\),由于 \(1011\) 没有到 \(1999\),所以直接取他的前三位和后三位取 \(max\),\(101 > 011\),所以 \(100 \sim 101\) 这一块的也被去掉了,直接取 \(102 \sim 1011\),答案为 \(910\)。场上就是到这里没接着推。挂掉 \(\text{80pts}\),囸。但是当时心态确实没了。。
T1
/*hack:
1
10 1011
ans:910
*/
#include <iostream>
#include <cmath>
#define GMY (520 & 1314)
#define char_phi signed
#define re register int
#define FBI_OPENTHEDOOR(x, y) freopen(#x ".in", "r", stdin), freopen(#y ".out", "w", stdout)
#define Endl cout << '\n'
#define _ ' '
#define Dl cerr << '\n'
#define DMARK cerr << "###"
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
using namespace std;
inline void Fastio_setup(){ios::sync_with_stdio(false); cin.tie(NULL), cout.tie(NULL);}
long long T, L, R, lwei, rwei, final_ans;
inline long long ksm(long long A, long long B){
long long res(1);
while (B != 0){
if ((B & 1) == 1) res = res * A;
A = A * A;
B >>= 1;
}
return res;
}
void work(){
cin >> L >> R; lwei = log10(L) + 1, rwei = log10(R) + 1;
if (lwei == rwei)
cout << R-L+1 << '\n';
else {
lwei = rwei-1; L = MAX(L, ksm(10, lwei-1)+1);
if (R <= ksm(10, rwei-1)*2 - 1)
cout << R - MAX(L, MAX(R/10, R%ksm(10, rwei-1))+1) + 1 << '\n';
else
cout << R-ksm(10, rwei-1)+1 << '\n';
}
}
// #define IXINGMY
char_phi main(){
#ifdef IXINGMY
FBI_OPENTHEDOOR(a, a);
#endif
Fastio_setup();
cin >> T;
while (T --)
work();
return GMY;
}