[NOIP2010]机器翻译

记录一下为啥被卡了半个小时
原题链接登录—专业IT笔试面试备考平台_牛客网
完整代码

#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[100000];
int h;
int l;
bool panduan(int x){
    
    for(int i = l;i<=h - 1;i++){
        if(a[i]==x) return false;
    }
    return true;
    //在存储里面返回false
    //不在里面返回true
}

int main(){
    
    cin>>m>>n;
    
    int ans = 0;
    int cnt = 0;
    ans+=m;//先假设储存能占满 此时ans = 1;
    h = 1;//维护内存的尾部
     l = 1;//维护内存的头部
    int k2 = 1;
    while(n--){
        int o = 1;
        int x;
        cin>>x;
       if(h<=m&&panduan(x)){
           a[h++] = x;
       }
        else if(h>m&&panduan(x)){
            ans++;
            a[l] = -1;
            l++;
            a[h] = x;
            h++;
        }

 
    }
    if(h<m+1) cout<<h-1<<endl;
    else cout<<ans<<endl;
    //cout<<ans<<endl;
    //不能忽略了另一种情况 有的根本就占不满外存储 
    return 0;
}

错误的原因:有的数据是0,这样在panduan函数中如果还用i<=h的话就正好会误判,因为此时a[h]没有输入数据。这样的话结果会比正确答案小,只能过60%的数据
 

竟然让这么个小错误折磨了我半个小时**&^&*&#*?^&&^

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值