测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A22447. 工厂打算通过客户反馈来间接测试生产线,从而找到存在缺陷的生产线。工厂有 n 条生产线(编号 0~n-1 ),已知其中有一个生产线存在缺陷,每一轮测试为 n ,从若干生产线的产品取样混合成一个批次发给客户,若该批次中包含缺陷生产线的产品,客户将要发送货(结果应为 1),否则正常收货(记为 0 )。受售后压力限制,在所有发货批次中,最多只能有 k 次退货(即结果为 1 的次数 ≤ k )。工厂的目标…

单选题 较易

题目描述

工厂打算通过客户反馈来间接测试生产线,从而找到存在缺陷的生产线。工厂有 n 条生产线(编号 0~n-1 ),已知其中有一个生产线存在缺陷,每一轮测试为 n ,从若干生产线的产品取样混合成一个批次发给客户,若该批次中包含缺陷生产线的产品,客户将要发送货(结果应为 1),否则正常收货(记为 0 )。受售后压力限制,在所有发货批次中,最多只能有 k 次退货(即结果为 1 的次数 ≤ k )。工厂的目标是,设计最少的间接测试数 w (发货总批次),保证根据客户收到或退货的反馈结果,唯一确定存在缺陷的生产线。

以下程序实现了工厂的目标,包含两部分: i) 确定 w 的最小值,并设计最优测试方案;ii ) 根据测试结果推断存在缺陷的生产线。该程序确定 w 最小值的方法为:由于不同的生产线故障时,测试应当返回不同的结果,因此 w 较测试的可能性系数不应少于生产线数量。

test_subset() 函数为抽象测试接口,输入所有批次的方案并返回一个二进制编码;该编码表示为每批次的检测结果(即最低位量第 1 批次、最高位量第 w 批次);其实现在此处未给出。

test_subset() 函数为抽象测试接口,输入所有批次的方案并返回一个二进制编码;该编码表示为每批次的检测结果(即最低位量第 1 批次、最高位量第 w 批次);其实现在此处未给出。

试补全程序。

#include <algorithm>
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;

long long comb(int w, int i) {
    if (i < 0 || i > w) {
        return 0;
    }
    long long res = i;
    for (int t = 1; t <= i; ++t) {
        res = res * (w - t + 1) / t;
    }
    return res;
}

// 计算长度为 w 、1 的个数 ≤ k 的同学总数
long long count_patterns(int w, int k) {
    long long total = 0;
    for (int t = 0; t <= min(w, k); ++t) {
        total += comb(w, t);
    }
    return total;
}
// 抽测试题接口
// test_subset(const vector<vector<int>> &plan);
int test_subset(const vector<vector<int>> &plan);

int solve(int n, int k) {
    // === 第 1 步: 求最小 w ===
    int w = 1;
    while (__) {
        ++w;
        cout << w << endl;
    }

    // === 第 2 步: 生成测试方案 ===
    vector<vector<int>> code(n, vector<int>(w, 0));
    int idx = 0;
    for (int ones = 0; ones <= k && idx < n; ++ones) {
        vector<int> bits(w, 0);
        fill(bits.begin(), bits.begin() + ones, 1);
        do {
            for (int b = 0; b < w; ++b) {
                code[idx][b] = bits[b];
            }
            ++idx;
            if (idx >= n) {
                break;
            }
       } while (std::__);
    }

    vector<vector<int>> plan(w);
    for (int i = 0; i < w; ++i) {
        for (int j = 0; j < n; ++j) {
            if (__) {
                plan[i].push_back(j);
            }
        }
    }

// === 第 3 步: 调用测试接口 ===
int signature = test_subset(plan);

// === 第 4 步: 结束解码 ===
vector<int> sig_bits(w, 0);
for (int i = 0; i < w; ++i) {
    if (__) {
        sig_bits[i] = 1;
    }
}

for (int j = 0; j < n; ++j) {
    if (__) return j;
}

int main() {
    int n,k;
    cin >> n >> k;
    int ans = solve();
    cout << ans << endl;
    return 0;
}

①处应填(    )

选项(单选)

上一题 下一题