CCF 201809_03元素选择器

#include <iostream>
#include<string>
#include<sstream>
#include<vector>
#include<algorithm>
using namespace std; 
const int MAXN=105;

struct Selector{
    int row;//行数 
    int rank;//层级 
    string label;//标签 
    string id;//标签内容 
};

int n,m;
Selector sel[MAXN];
string html,css;

int main(int argc, char** argv) {
    cin>>n>>m;
    getchar();
    for(int i=1;i<=n;i++){
        getline(cin,html);
        sel[i].row=i;
        istringstream ss(html);
        string str;
        ss>>str;
        int cd;
        for(cd=0;str[cd]=='.';cd++);
        sel[i].rank=cd/2;//计算层级 
        sel[i].label=str.substr(cd);//获取标签('...'之后的字符串) 
        transform(sel[i].label.begin(),sel[i].label.end(),
        sel[i].label.begin(),::tolower);//将标签转换成小写字母 
        while(ss>>str){
            if(str[0]=='#')
                sel[i].id=str;
        }    
    }
    
    for(int i=0;i<m;i++){
        getline(cin,css);
        istringstream ss(css);
        vector<string>query;//动态的序列容器,动态数组 
        string str;
        while(ss>>str){
            if(str[0]!='#'){
                transform(str.begin(),str.end(),str.begin(), ::tolower);
            }
            query.push_back(str);
        }
        //查询条件的最后一个标签或属性是关键字 
        int ans[MAXN];//存储满足条件的行数 
        int cnt=0;//计数
        int num;//实际满足条件的个数
        vector<string>::reverse_iterator it=query.rbegin();//反向迭代器 
        for(int j=1;j<=n;j++){
            if(sel[j].id==*it||sel[j].label==*it){
                ans[cnt++]=j;
            }
        }
        num=cnt;
        for(int c=0;c<cnt;c++){
            it=query.rbegin()+1;
            int mrank=sel[ans[c]].rank;
            for(int j=ans[c]-1;it!=query.rend()&&j>0;j--){
                if(sel[j].rank<mrank&&(*it==sel[j].label||*it==sel[j].id)){
                    it++;
                    mrank=sel[j].rank;
                }
            }
            if(it!=query.rend()){
                ans[c]=0;
                num--;
            }
        }
        cout<<num;
        for(int j=0;j<cnt;j++){
            if(ans[j]){
                cout<<" "<<ans[j];
            }
        }
        cout<<endl;
    }
    
    return 0;
}

 

ccf_offline_stage1_train.csv是中国计算机大赛(CCF)的离线阶段一训练数据集。该数据集是CCF比赛组织方提供给参赛选手进行机器学习和数据挖掘训练的文件。 此数据集包含了2016年至2017年之间顾客线下购买行为的信息。具体而言,它包含了购买券的用户ID、商户ID、交易时间、优惠券ID以及是否使用优惠券等信息。 通过这个数据集,我们可以进行很多有趣的分析和预测。例如,我们可以利用用户的购买行为,预测用户对不同商户的购买意愿,从而帮助商户制定更加精准的促销策略。我们还可以通过分析使用优惠券与不使用优惠券之间的购买行为差异,评估优惠券的推广效果。此外,我们可以根据用户的购买行为数据,对用户进行分类,从而进一步了解不同类型用户的消费习惯。 当然,使用这个数据集进行分析也存在一些挑战和限制。首先,它只包含了线下购买行为的信息,而忽略了线上购买行为。其次,数据集中的一些特征可能存在缺失或错误,需要在使用前进行数据清洗和预处理。此外,数据集的规模可能相对较小,可能需要进一步收集更多样本进行分析和训练。 总之,ccf_offline_stage1_train.csv是一个有价值的数据集,可以被用来进行用户行为分析、预测和商业决策支持。通过深入挖掘这些数据,我们可以更好地理解顾客行为,并制定更有效的营销策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值