hdu 4956

1546 ワード

http://acm.hdu.edu.cn/showproblem.php?pid=4956
まず範囲[l,r]を与えて、中から一つの数の証明を見つけられるかどうか聞いてください. Hanamichi’s solutionの解法 奇数桁の数字の和 = 3 そしてこのXはX mod 11=3を満たすのが間違っています.つまり、範囲内では、①偶数桁の数字の合計があるかどうかを探します. 奇数桁の数字の和 = 3.②X mod 11=3
暴力
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <vector>
#include<set>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define clr0(x) memset(x,0,sizeof(x))
typedef long long LL;
bool sum(LL n)
{
    int ans = 0,cnt = 0;
    while(n){
        if(cnt&1)
            ans -= n%10;
        else
            ans += n%10;
        n/=10;
        cnt++;
    }
    //cout<<ans<<endl;
    if(ans == 3)
        return true;
    return false;
}
int main() {
    //cout<<sum(102);
    int _;
    RD(_);
    LL l,r;
    while(_--){
        scanf("%I64d%I64d",&l,&r);
        LL ll = l/11,rr = (r+8)/11,ans;
        ans = 11*ll+3;
        while(ans<l)
            ans+=11;
        while(sum(ans)){
            ans+=11;
            if(ans > r)
                break;
        }
        if(ans>r){
            puts("-1");
        }
        else
            printf("%I64d
",ans); } return 0; }