P10024 「HCOI-R1」报名人数 题解

· · 个人记录

博客园。

我们会发现,2 和 3 的火柴个数是一样的,9 和 0 的火柴个数是一样的。

所以只有在 12 到 13 这样是合法的,自己推一下可以知道,最多只有连续两个。

而在 l 到 r 的长度大于 9 的时候可以直接输出 2。

剩下的情况直接暴力枚举即可。

#define int unsigned long long
const int mod = 1e9+7;
//const int mod = 998244353;
const int inf = 0x3f3f3f3f,N = 2e5+5,M = 2e5+5;
const ll linf = 0x3f3f3f3f3f3f3f3f;
int l,r;
int tmp[15]={6,2,5,5,4,5,6,3,7,6};
void solve(){
    cin >> l >> r;
    if(r-l > 9) cout << 2;
    else {
        for(int i = l+1;i <= r;i++){
            int x=i,y=i-1;
            int cnt1=0,cnt2=0;
            while(x){
                cnt1 += tmp[(x%10)];
                x/=10;
            }
            while(y){
                cnt2 += tmp[(y%10)];
                y/=10;
            }

            if(cnt1==cnt2){
                cout<<2;
                return ;
            }
        }cout<<1;
    }
}