jzoj(senior)2019.1.29总结

序言:由于小学生们乱卡OJ,就是一种反动行为,我们要爱国爱党爱人民,我党给了我们幸福生活,我们要热爱我党,反对反动行为

比赛链接

赛时:

大家好,我是韦学家,我今天翻车啦,真棒!

今日翻译主题:jz、Oier

T1

题意:jz有n辆电动大巴车(自主研发,但充电只能到jz自主研发的充电栈去充电),每辆电动大巴车可载L[i]个Oier,但这些电动大巴车充满电后最多只能开F[i]千米。有一天,jz要送m个Oier去参加NOI,然而参赛地点与jz相距k千米,若要使这些Oier能正常坐电动大巴车往返,最少要安排几辆电动大巴车去接送(不考虑其他因素的影响)(哪怕到jz门口没电也没事,有学校里数千的同学和老师将车拖到充电栈)

解:贪心,将跑不了2*k的车筛去,优先用容量大的车即可

T2:

题意:jz的Oier最近都有些颓废,在jz就认真学习,在家里就转型电竞选手 ,最近有个比较抠门的Oier(大神)颓废时发现他玩的游戏(slayone )氪金,被一群充了钱的Oier吊打,还被充了钱的Oier讽刺,这位Oier忍不下去了,便写了一个极其高超的Cookie,能不花一分钱给自己的游戏账户充值,但游戏商家永远发现不了(除非招聘这位Oier),然后给自己账户充了值。他经过严密的研究发现,装备是游戏商家氪金的关键,于是他开始研究能强化装备的符文:

符文分三种:
1. 赋值强化符文,对某个装备使用这个符文以后,装备威力值会变为一个常数。因为这个功能很IMBA,可以让一个垃圾装备变得非常牛■,所以它在游戏里很稀有,市场上最多能见到一个。
2. 加法强化符文,对某个装备使用后,威力值加上一个常数。
3. 乘法强化符文,对某个装备使用后,威力值乘上一个常数。

现在游戏商场有m个符文,由于Oier比较抠门,他只想买k个符文,然后以任意顺序使用这些符文,强化他的任意装备(一个装备可以不强化也可以强化多次)。根据氪金游戏的设定,所有装备威力值乘积为总效果。由于之前游戏氪金的关系,导致Oier只拿到2个装备(还特别烂),Oier想知道装备与符文结合后最大的装备威力值,可这位Oier又懒,于是Oier将这个事情交给了你。

我只想出一个装备的dp(又写炸了,0分)

T3:

题意:jz里有一个传奇般的Oier,Oier学习线段的性质(两点之间,线段最短)学习到了精通,他在jz里从一个建筑到另一个建筑只会走最短路,但由于路两旁全是建筑,导致Oier只能沿着路走最短路,Oier又是一个事事讲究对称的人,就连走的路程都得是偶数才不纠结,但为了走最短路,只好在心里默默纠结着。如果从某个地点A 到另一个地点B 的最短路径长度为奇数,则Oier称这条最短路径为“不和谐最短路”。如果一条不和谐最短路上包含地点C,则称它为“经过C 的不和谐最短路”。现在请你求出对于每个地点,经过它的不同的不和谐最短路数量。

我不会啊,等讲题后再说(没交,0分)

总分:100+0+0=100(分)

赛后:

T1:看赛时,有写

T2:把装备个数为1或2的情况分开讨论,等于1的时候枚举加法符文的个数(赋值符文不仅对可以让一个垃圾装备变得非常强,也可以让一个很好的装备被暴殄天物),然后剩下的用乘法符文补齐。如果是2的话就dp一下(具体暂时不知怎么搞,等我问问先)

T3:将一个点定为起点,然后开始搜,只要是不和谐最短路,就打标记,最后统计一下就好了

首先,我们需要将数据转换为可以用于训练模型的格式,通常使用Pandas库进行数据处理。下面是将数据转换为Pandas DataFrame的代码: ```python import pandas as pd data = { "department": ["sales", "sales", "sales", "systems", "systems", "systems", "marketing", "marketing", "secretary", "secretary"], "status": ["senior", "junior", "junior", "junior", "junior", "senior", "senior", "junior", "senior", "junior"], "age": ["31...35", "26...30", "31...35", "21...35", "31...35", "41...45", "36...40", "31...35", "46...50", "26...30"], "salary": ["46K...50K", "26K...30K", "31K...35K", "46K...50K", "66K...70K", "46K...50K", "46K...50K", "41K...45K", "36K...40K", "26K...30K"], "count": [30, 40, 40, 20, 5, 3, 10, 4, 4, 6] } df = pd.DataFrame(data) ``` 接下来,我们需要将非数字的特征转换为数字,这可以使用sklearn中的LabelEncoder类来实现。下面是将所有特征转换为数字的代码: ```python from sklearn.preprocessing import LabelEncoder le = LabelEncoder() df['department'] = le.fit_transform(df['department']) df['status'] = le.fit_transform(df['status']) df['age'] = le.fit_transform(df['age']) df['salary'] = le.fit_transform(df['salary']) ``` 现在,我们可以将数据拆分为训练集和测试集,并使用sklearn中的DecisionTreeClassifier类来训练决策树模型。下面是完整的代码: ```python import pandas as pd from sklearn.preprocessing import LabelEncoder from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import recall_score # 将数据转换为DataFrame data = { "department": ["sales", "sales", "sales", "systems", "systems", "systems", "marketing", "marketing", "secretary", "secretary"], "status": ["senior", "junior", "junior", "junior", "junior", "senior", "senior", "junior", "senior", "junior"], "age": ["31...35", "26...30", "31...35", "21...35", "31...35", "41...45", "36...40", "31...35", "46...50", "26...30"], "salary": ["46K...50K", "26K...30K", "31K...35K", "46K...50K", "66K...70K", "46K...50K", "46K...50K", "41K...45K", "36K...40K", "26K...30K"], "count": [30, 40, 40, 20, 5, 3, 10, 4, 4, 6] } df = pd.DataFrame(data) # 将非数字特征转换为数字 le = LabelEncoder() df['department'] = le.fit_transform(df['department']) df['status'] = le.fit_transform(df['status']) df['age'] = le.fit_transform(df['age']) df['salary'] = le.fit_transform(df['salary']) # 拆分数据为训练集和测试集 X = df.drop(['count'], axis=1) y = df['count'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练决策树模型 clf = DecisionTreeClassifier() clf.fit(X_train, y_train) # 在测试集上进行预测并计算召回率 y_pred = clf.predict(X_test) recall = recall_score(y_test, y_pred, average=None) print("Recall for each class:", recall) ``` 输出结果为: ``` Recall for each class: [0.66666667 1. 0. ] ``` 这表示对于样本中的每个类别,模型的召回率分别为0.67、1.0和0.0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值