#10049. 「一本通 2.3 例 1」Phone List

给定 个长度不超过 的数字串,问其中是否存在两个数字串 ,使得 是 的前缀,多组数据。
输入格式
第一行一个整数 ,表示数据组数。

对于每组数据,第一行一个数 ,接下来 行输入 个数字串。
输出格式
对于每组数据,若存在两个数字串 ,,使得 是 的前缀,则输出 NO ,否则输出 YES 。

请注意此处结果与输出的对应关系!
样例输入
2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
样例输出
NO
YES
数据范围与提示
对于100%的数据 ,1<=T<=40,1<=n<=1e4
字典树模板 刚开始把tot=1放在全局变量,我以为这样也可以每次循环tot=1,后来发现tot=1必须放在主函数里

判断某个两个数字串S,T,S是否是T的前缀

1.当字符串遍历完,依然没有新建结点
2.遍历到串结尾标记
//若当前串插入后没有新建任何结点;当前串是之后串的前缀
//经过带有串结尾标记,则之前是当前前缀

#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn = 1e5 + 10;
int tot;  //结点信息
int ch[maxn][20];
bool bo[maxn];  //标记尾结点
char a[20];
bool insert(char *s)  //插入一个字符串
{
    int u = 1;  //根结点
    int len = strlen(s);
    //  int i;
    bool flag = false;
    for (int i = 0; i < len; i++) {
        int c = s[i] - '0';
        if (!ch[u][c])
            ch[u][c] = ++tot;
        else if (i == len - 1)   //注意这里是else if 即当ch[u][c]==0&&i==len-1
            flag = true;
        u = ch[u][c];
        if (bo[u])
            flag = true;  //经过的节点带有串结尾标记
    }
    // if(i==len)      //遍历完了,依然没有新建结点
    //    flag=true;
    bo[u] = true;  //尾结点标记
    return flag;
}
int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        int n;
        scanf("%d", &n);
        tot = 1;
        memset(ch, 0, sizeof(ch));
        memset(bo, false, sizeof(bo));
        int k = 0;
        while (n--) {
            scanf("%s", a);
            if (insert(a))
                k = 1;
            else
                continue;
        }
        if (k)
            printf("NO\n");
        else
            printf("YES\n");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
print("开始执行推荐算法....") #spark.sql(etl_sql).write.jdbc(mysql_url, 'task888', 'overwrite', prop) # 获取:用户ID、房源ID、评分 etl_rdd = spark.sql(etl_sql).select('user_id', 'phone_id', 'action_core').rdd rdd = etl_rdd.map(lambda x: Row(user_id=x[0], book_id=x[1], action_core=x[2])).map(lambda x: (x[2], x[1], x[0])) # 5.训练模型 model = ALS.train(rdd, 10, 10, 0.01) # 7.调用模型 products_for_users_list = model.recommendProductsForUsers(10).collect() # 8.打开文件,将推荐的结果保存到data目录下 out = open(r'data_etl/recommend_info.csv', 'w', newline='', encoding='utf-8') # 9.设置写入模式 csv_write = csv.writer(out, dialect='excel') # 10.设置用户csv文件头行 user_head = ['user_id', 'phone_id', 'score'] # 12.写入头行 csv_write.writerow(user_head) # 13.循环推荐数据 for i in products_for_users_list: for value in i[1]: rating = [value[0], value[1], value[2]] # 写入数据 csv_write.writerow(rating) print("推荐算法执行结束,开始加工和变换推荐结果....") # 14.读取推荐的结果 recommend_df = spark \ .read \ .format('com.databricks.spark.csv') \ .options(header='true', inferschema='true', ending='utf-8') \ .load("data_etl/recommend_info.csv") # 注册临时表 recommend_df.createOrReplaceTempView("recommend") # 构造 spark执行的sql recommend_sql = ''' SELECT a.user_id, a.phone_id, bid,phone_name, phone_brand, phone_price, phone_memory ,phone_screen_size,ROUND(score,1) score FROM recommend a,phone b WHERE a.phone_id=b.phone_id ''' # 执行spark sql语句,得到dataframe recommend_df = spark.sql(recommend_sql) # 将推荐的结果写入mysql recommend_df.write.jdbc(mysql_url, 'recommend', 'overwrite', prop) 解释一下这段代码
最新发布
06-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值