青峰祭坛 2015-08-25 04:02 采纳率: 0%
浏览 1599
已结题

poj1598 测试数据通过但是wrong answer 求高手指点

1598 poj

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct Excuse{
    string s;
    int n;
};
bool com(Excuse a,Excuse b){
    return a.n > b.n;
}

int main(){
    ifstream cin("aaa.txt");
    vector<string> vk;
    vector<Excuse>vs;
    int n, m;
    string sk;
    string s,ss;
    int knum;
    Excuse e;
    int line = 1;
    while (cin >> n >> m){
        vs.clear();
        vk.clear();
        //if (line != 1)cout << endl;

        for (int  i= 0; i < n; i++){
            cin >> sk;
            vk.push_back(sk);
        }
        getline(cin, ss);
        for (int j = 0; j < m; j++){
            getline(cin, ss);
            s = ss;
            //大写字母变小写
            for (int k = 0; k < s.size(); k++){
                if (s[k] >= 'A'&&s[k] <= 'Z')s[k] = s[k] + 32;          
            }
            knum = 0;
            //扫描关键子
            for (int i = 0; i < vk.size(); i++){
                int kn = vk[i].size();
                for (int p = 0; p < s.size() - kn +1 ; p++){
                    //截取一个子串
                    string st = "";
                    for (int k = p; k < p + kn; k++){
                        st = st + s[k];
                    }

                    //关键字在句首,且关键字后一字符不是字母;
                    if (p == 0 && st == vk[i] && isalpha(s[p + kn])){
                        knum++;
                    }
                    //关键字在居中,且前后字符不是字母
                    else if (st == vk[i]
                        && !isalpha(s[p + kn])
                        && !isalpha(s[p - 1]))knum++;                   
                }               

            }           
            e.s = ss;
            e.n = knum;
            vs.push_back(e);            
        }
        sort(vs.begin(), vs.end(), com);
        cout << "Excute Set #" << line << endl;
        line++;
        for (int i = 0; i < vs.size(); i++){
            if (i != 0 &&vs[i].n < vs[i - 1].n)break;
            //else if (i != 0 && vs[i].s == vs[i - 1].s)continue;   
            cout << vs[i].s << endl;
        }
        cout << endl;
    }

    system("pause");
}


  • 写回答

2条回答

  • threenewbee 2015-09-07 22:27
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。