You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Map构造是否存在问题?OJ特殊样例无法通过求助

问题诊断与修复方案

嘿,我一眼就瞅到你代码里的关键问题了,这绝对是特殊样例翻车的元凶:

核心bug:错把首个输入店铺当成了"memory"

你计算排名时用dic[names[0]]作为对比基准,但题目里只要求关注名为**"memory"**的店铺——它完全可能出现在输入的任意位置,不一定是第一个啊!这就导致你的代码在大部分情况下,算的都是第一个店铺的排名,而非"memory"的,自然会在"memory"不是首个输入的测试用例里出错。

修复思路(超简单!)

直接把对比基准换成dic["memory"]就行!你已经用map<string, int>存了所有店铺的价格,通过键名"memory"就能直接拿到它的当前价格,根本不需要依赖输入顺序。

另外给你加个小优化:可以把读取s和p的两个scanf合并成一个,代码会更简洁。

修正后的完整代码

#include<algorithm>
#include<iostream>
#include<map>
#include<cstdio>
using namespace std;
const int maxn = 10010;
int main(){
    int n,m;
    map<string ,int> dic ;
    char names[maxn][32];
    scanf("%d",&n);
    for(int i = 0;i<n;i++){
        scanf("%s",names[i]);
        dic[names[i]] = 0;
    }
    scanf("%d",&m);
    while(m--){
        for(int i = 0;i<n;i++){
            int temp;
            char tp[32];
            scanf("%d %s", &temp, tp); // 合并读取,更简洁
            dic[tp] += temp;
        }
        int target_price = dic["memory"];
        int ranking = 1;
        for(int j = 0;j<n;j++){
            if(dic[names[j]] > target_price){
                ranking++;
            }
        }
        printf("%d\n",ranking);
    }
    return 0;
}

额外验证说明

  • 输入读取逻辑:题目要求每行是s(涨价数值)和p(店铺名),你的代码读取顺序是对的,没问题。
  • 价格累积逻辑:map全局维护价格,每日涨价会累加,符合"每日涨价后"的要求。
  • 排名计算逻辑:初始为1,每遇到价格更高的店铺就加1,完全匹配题目"t家高于则排名t+1"的规则。

内容的提问来源于stack exchange,提问作者Bat_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:46:16