解题思路: 首先,我们需要统计每个颜色出现的次数,以便后面计算方案数。 假设小Q射击的颜色是color,那么小C需要选择一个颜色与color不同的时间点进行射击。 假设小C选择的颜色对应的时间点是x,那么小C的射击方案数就是color对应的次数减去x对应的次数。 所以,我们需要遍历每个颜色,统计其对应的次数,并计算小C的射击方案数。 最后,将所有颜色对应的小C射击方案数相加就是最终的方案数。

具体操作如下:

  1. 读入N和颜色序列colors。
  2. 统计每个颜色出现的次数,可以使用数组colorCount[10]来记录,colorCount[i]表示颜色i出现的次数。 遍历颜色序列colors,对于每个字符c,将其转换为数字i,然后colorCount[i]++。
  3. 初始化小C的射击方案数为0。
  4. 遍历每个颜色,假设当前颜色为color。 a. 遍历每个时间点,假设当前时间点为i。 i. 如果当前时间点对应的颜色与color相同,则跳过。 ii. 否则,将颜色i对应的次数加到小C的射击方案数上。
  5. 输出小C的射击方案数。

时间复杂度分析: 统计每个颜色出现的次数需要遍历颜色序列,时间复杂度为O(N)。 计算小C的射击方案数也需要遍历颜色序列,时间复杂度为O(N)。 所以总的时间复杂度为O(N)。

代码如下:

#include #include #include using namespace std;

int main() { int N; string colors; cin >> N >> colors;

vector<int> colorCount(10, 0);
for (int i = 0; i < colors.size(); i++) {
    int color = colors[i] - '0';
    colorCount[color]++;
}

int shootCount = 0;
for (int color = 0; color < 10; color++) {
    for (int i = 0; i < N; i++) {
        int curColor = colors[i] - '0';
        if (curColor == color) {
            continue;
        }
        shootCount += colorCount[curColor];
    }
}

cout << shootCount << endl;

return 0;
cpp题目描述一天小 �C 和小 �Q 去练习射击现在摆在他们面前的有 11 个神奇的靶子这个靶子只存在 �N 秒钟并且每一秒钟颜色都会变化小 �C 和小 �Q 的感情很好他们希望射击相同到颜色。请你帮他们算算他们有多少种选择的方案。射击的时候小 �Q 先射然后小 �C 再射。输入格式第一行输入一个整数 �N表示 �N 秒钟接下来一行字符表示每一秒钟靶子的颜色用数字 0−90−9 表示颜色。输出格

原文地址: https://www.cveoy.top/t/topic/iLOY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录