Codeforces Round #742 (Div. 2)--C

原题链接: Carrying Conundrum
Codeforces Round #742 (Div. 2)--C

思路:因为题目定义的进位是往前两位进位,也就是奇数位进奇数位,偶数位进偶数位,
进而可以发现奇数位和偶数位互不影响。我们把目标数n的奇偶位分开组成新的数:比如
n=abcd ,n1=ac ,n2=bd。正常运算下凑一个数x的方式数是x+1,最后减去n1和n2是0的情况
最终答案就是:(n1+1)*(n2+1)-2 。

void solve(){
    ll n;
    cin>>n;
    ll a=0,b=0; int cnt=1; ll k=1;
    while(k<=n) k*=10,cnt++;k/=10;cnt--;
    while(cnt){
        if(cnt%2==1)
        a=a*10+n/k;
        else b=b*10+n/k;
        n=n%k; k/=10;
        cnt--;
    }
    cout<<(a+1)*(b+1)-2<<endl;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
上一篇:整数划分问题


下一篇:2021年N1叉车司机考试平台及N1叉车司机操作证考试