美团,求大佬,被7整除(10%), 关灯泡(40%, 超时)

被7整除。

int count1(int num) {
    int count = 0;
    while (num) {
        num = num & (num - 1);
        count++;
    }
    return count;
}

int solve(int num, vector<string>& vec, int n) {
    int index1 = -1, index2 = -1;
    for (int i = 0; i < n; i++) {
        if (num & 1) {
            if (index1 == -1) {
                index1 = i;
            } else if (index2 == -1) {
                index2 = i;
            } else break;
        }
        num = num >> 1;
    }

    int count = 0;
    long long res1 = stoll(vec[index1] + vec[index2]);
    long long res2 = stoll(vec[index2] + vec[index1]);
    if (res1 % 7 == 0) count++;
    if (res2 % 7 == 0) count++;
    return count;

}

int main() {
    int n;
    while (~(scanf("%d", &n))) {
        vector<string> vec(n, "");
        long long count = 0;
        for (int i = 0; i < n; i++) cin >> vec[i];
        for (int i = 0; i < (1<<n); i++) {
            if (count1(i) == 2) {
                count += solve(i, vec, n);
            }
        }
        printf("%lld\n", count);
    }
    return 0;
}

关灯泡

bool helperFirst(vector<int>& vec, int index) {
    for (int i = index; i < vec.size(); i++) {
        if (vec[i] == 1) vec[i] = 0;
        else vec[i] = 1;
    }
    bool flag = true;
    for (int i = 0; i < vec.size(); i++) {
        if (vec[i] == 1) {
            flag = false;
            break;
        }
    }
    if (flag) return flag;

    for (int i = 0; i < vec.size(); i++) {
        if (vec[i]) {
            if (helperFirst(vec, i)) {
                flag = false;
                break;
            }
        }
    }
    return flag;
}

int main() {
    int n;
    while (cin >> n) {
        vector<int> vec(n, 0);
        for (int i = 0; i < n; i++) cin >> vec[i];
        int flag = false;
        for (int i = 0; i < n; i++) {
            if (vec[i]) {
                if (helperFirst(vec, i)) {
                    flag = true;
                    break;
                }
            }
        }
        if (flag) cout << "Alice" << endl;
        else cout << "Bob" << endl;
    }
    return 0;
}

#美团#
全部评论
我那个被7整除也是10% 但是我试了很多用例,都没有错 不知道哪里判错了
点赞
送花
回复
分享
发布于 2017-09-14 21:26
这题做的郁闷,直接删美团外卖App了
点赞
送花
回复
分享
发布于 2017-09-14 21:27
滴滴
校招火热招聘中
官网直投
一开始还能70 后来直接10 怎么调都是10 玄学赛马。。
点赞
送花
回复
分享
发布于 2017-09-14 21:28
第一题0,第二题AC,心碎了一地 int r[15][10]; int c[10]; int count(int n){ int cnt = 0; while (n){ cnt++; n /= 10; } return cnt; } long long getnum(int n, int m){ long long res = n; while (m--) res *= 10; return res; } int main(){ int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++){ cin >> a[i]; r[count(a[i])][a[i] % 7]++; c[a[i] % 7]++; } long long res = 0; for (int i = 1; i <= 9; i++){ for (int j = 0; j <= 6; j++){ if (r[i][j] == 0)continue; for (int k = 0; k <= 6; k++){ if (c[k] == 0)continue; long long tmp = getnum(k, i) + j; if (tmp % 7 == 0){ if(j==k)res += r[i][j] * (c[k] - 1); else res += r[i][j] * c[k]; } } } } cout << res << endl; }
点赞
送花
回复
分享
发布于 2017-09-14 21:28
#include<iostream> #include<vector> using namespace std; int main(){ int n; cin>>n; vector<int> vec(n,0); int i=0; while(i<n) cin>>vec[i++]; vector<int> alice; vector<int> bob; int aflag=0,bflag=0,shou=0; for(int i=0;i<n;i++){ if(vec[i]==1&&aflag==0){ alice.push_back(i); aflag=1; bflag=0; shou=1; } if(vec[i]==0&&bflag==0&&shou==1){ bob.push_back(i); bflag=1; aflag=0; } } if(alice.size()>bob.size()) cout<<"Alice"; else{ cout<<"Bob"; } return 0; } 第二题全AC 第一题我也10%。。。。
点赞
送花
回复
分享
发布于 2017-09-14 21:28
我用了一个二维数组做的,ac了。。arr[i][j],i代表当前数字对7取余,j代表当前Math.pow(3,数字的位数)对7取余,arr[i][j]的值是数量。。然后在二维数组里找就行了。。
点赞
送花
回复
分享
发布于 2017-09-14 21:30
美团这题出的太蛋疼了,第一题犹豫了半天要不要考虑重复数字,第二题和昨天网银科技一样,两个人都每次贪心求局部最优解,可是这样还聪明个毛啊,顺便吐槽赛码,卡死好几次
点赞
送花
回复
分享
发布于 2017-09-14 21:31

相关推荐

投递腾讯等公司8个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务