BestCoder Round #19。。。我是个2XXXXX。

刚刚做了BestCoder我也是醉了,一共做了2题,最后结束系统测的时候全错了,rating直接掉了195,妈蛋,自己一检查,第一题一个特殊情况没特判,第二题一个小于等于号写成了小于号,然后立马又去HDU提交A掉了,A完我立马就醉了,我的rating啊,我的粉名,我怒了,以后每周都要打BestCoder!!!

第一题:就是枚举一个数的最大素因子,然后除一下就好了,记得数为1的时候输出0。

#include
#include
const int N = 40004;
bool vi[N];
int prim[N];
int num;
void init(){
    for(int i = 2; i < N; i++){
        if(!vi[i]){
            prim[num++] = i;
            for(int j = i * i; j < N; j += i) vi[j] = true;
        }
    }
}

int main(){
    init();
    int n;
    while(scanf("%d", &n) == 1){
        if(n == 1){printf("0\n");continue;}
        int ans = 0;
        int m = n;
        for(int i = 0; i < num  && n != 1; i++){
            if(n % prim[i] == 0){
                ans = prim[i];
                while(n % prim[i] == 0) n /= prim[i];
            }
        }
        if(n > ans)  ans = n;
        printf("%d\n", m/ans);
    }
    return 0;
}

第二题:把A*B = N 的找一个最小的B的问题转化为找一个最小的 N mod A = 0。 N 应该为 aTb的形式,b一定是小于A的,因为若不小于A则可以一直减A。然后因为A <= 10000,我们可以从1到A枚举a,然后b所占的位数一定是小于等于4位的,我们可以枚举aT * 10 到 10000,如果  A - aT * 10^x % B < 10 ^ x 则我们可以保证取到a * b * 10^x + (A - aT * 10^x) % A == 0,这样问题就解决了。我的那可怜的小于号就是 i <= 10000 写成了 i < 10000错了,悲剧。

#include
#include
#include
#include
using namespace std;
typedef long long LL;
LL toint(char *s){
    LL ret = 0;
    while(*s){
        ret = ret * 10 + *s - '0';
        s++;
    }
    return ret;
}
LL pow10[10];
int main(){
    int A;
    char s[10];
    pow10[0] = 1;
    for(int i = 1; i <= 8; i++) pow10[i] = pow10[i-1]*10;
    while(scanf("%d%s", &A, s) == 2){
        LL T = toint(s);
        int len = strlen(s);
        LL p = pow10[len];
        int d = 0;
        if(s[0] == '0') d++;
        LL ans = 1LL << 62;
        for(LL i = d; i < A + d; i++){
            LL num = i * p + T;
            if(num % A == 0){
                ans = min(ans, num / A);
            }
            for(int i = 10; i <= 10000; i *= 10){
                int x = (A - num * i % A) % A;
                if(x < i){
                    ans = min(ans, (num * i + x) / A);
                    break;
                }
            }
        }
        printf("%I64d\n", ans);
    }
    return 0;
}

你可能感兴趣的:(比赛总结)