problem 1109

Language of FatMouse 

问题十分简单,关键在于数据量大直接循环做会超时。这里采用先排序再二分搜索的方法。排序用qsort(),搜索用bsearch()(不知道怎么用的看这里 c语言中几个很有用的函数)。

还可以用树来做,建一个二十六叉树,这样时间和空间效率都将提升不少,不过比排序做要麻烦。

Accepted1109C00:00.563628K

#include<stdio.h>
#include<string
.h>
#include
<stdlib.h>
struct  s
{
    
char a[11
];
    
char b[11
];
}d[
100008
];
char w[100008][11
];
int cmp(const void* a,const void*
 b)
{
    
return strcmp((*(struct s*)a).b,(*(struct s*
)b).b);
}
int cmp1(const void* a,const void*
 b)
{
    
return strcmp((char *)a,(*(struct s*
)b).b);
}
void
 solve()
{
    
char temp[22
];
    
int
 cnt1,cnt2,k;
    cnt1 
= cnt2 = k = 0
;
    
while(1
)
    {
        
int i = 0,j = 0
;
        gets(temp);
        
if(temp[0== 0
)
            
break
;
        
while(temp[i] != ' '
)
            d[cnt1].a[i] 
= temp[i++
];
        
while(temp[++i] != 0
)
            d[cnt1].b[j
++=
 temp[i]; 
        cnt1
++
;
    }
    
while(scanf("%s",w[cnt2++]) !=
 EOF);
    cnt2
--
;
    qsort(d,cnt1,
sizeof(d[0
]),cmp);
    
for(k = 0; k < cnt2; k++
)
    {
        
struct s*
 t;
        t 
= bsearch(w[k],d,cnt1,sizeof(d[0
]),cmp1);
        t 
== NULL ? puts("eh") : puts(t->
a);
    }
}
void
 main()
{
#ifndef ONLINE_JUDGE
    freopen(
"test.txt","r",stdin);
#endif
    solve();
#ifndef ONLINE_JUDGE
    fclose(stdin);
#endif
}
ValueError Traceback (most recent call last) Cell In[13], line 101 99 algorithm.mutOper.Pm = 0.2 # 修改变异算子的变异概率 100 algorithm.recOper.XOVR = 0.9 # 修改交叉算子的交叉概率 --> 101 res = ea.optimize(algorithm, 102 verbose=True, 103 drawing=1, 104 outputMsg=True, 105 drawLog=False, 106 saveFlag=True, 107 dirName = 'D:/Desktop/煤溶胀-机器学习/代码/VD-代码/SVR预测/Final/TG' 108 ) File ~\.conda\envs\python3.9\lib\site-packages\geatpy\optimize.py:104, in optimize(algorithm, seed, prophet, verbose, drawing, outputMsg, drawLog, saveFlag, dirName, **kwargs) 102 algorithm.drawing = drawing if drawing is not None else algorithm.drawing 103 # 开始求解 --> 104 [optPop, lastPop] = algorithm.run(prophetPop) 105 # 生成结果 106 result = {} File ~\.conda\envs\python3.9\lib\site-packages\geatpy\algorithms\moeas\nsga2\moea_NSGA2_templet.py:86, in moea_NSGA2_templet.run(self, prophetPop) 84 if prophetPop is not None: 85 population = (prophetPop + population)[:NIND] # 插入先知种群 ---> 86 self.call_aimFunc(population) # 计算种群的目标函数值 87 [levels, _] = self.ndSort(population.ObjV, NIND, None, population.CV, self.problem.maxormins) # 对NIND个个体进行非支配分层 88 population.FitnV = (1 / levels).reshape(-1, 1) # 直接根据levels来计算初代个体的适应度 File ~\.conda\envs\python3.9\lib\site-packages\geatpy\Algorithm.py:209, in Algorithm.call_aimFunc(self, pop) 207 if self.problem is None: 208 raise RuntimeError('error: problem has not been initialized. (算法类中的问题对象未被初始化。)') --> 209 self.problem.evaluation(pop) # 调用问题类的evaluation() 210 self.evalsNum = self.evalsNum + pop.sizes if self.evalsNum is not None else pop.sizes # 更新评价次数 211 # 格式检查 File ~\.conda\envs\python3.9\lib\site-packages\geatpy\Problem.py:218, in Problem.evaluation(self, pop) 216 evalVarsCallFlag = True 217 if evalVarsCallFlag: --> 218 return_object = self.evalVars(pop.Phen) 219 if type(return_object) != tuple: 220 pop.ObjV = return_object Cell In[13], line 60, in MyProblem.evalVars(self, X) 54 svr_tg = SVR(kernel = 'poly' 55 , C = param_svr[tar_name[0]][0] 56 , gamma = param_svr[tar_name[0]][1] 57 , epsilon = param_svr[tar_name[0]][2] 58 ).fit(chara_scal, vd_scal.iloc[:,0]) 59 pre_tg = np.round(svr_tg.predict(x_pred_scal), 2).reshape(-1,1) ---> 60 scal_tg = tg_scal.inverse_transform(pre_tg) 62 svr_tem = SVR(kernel = 'poly' 63 , C = param_svr[tar_name[1]][0] 64 , gamma = param_svr[tar_name[1]][1] 65 , epsilon = param_svr[tar_name[1]][2] 66 ).fit(chara_scal, vd_scal.iloc[:,1]) 67 pre_tem = np.round(svr_tem.predict(x_pred_scal), 2).reshape(-1,1) File ~\.conda\envs\python3.9\lib\site-packages\sklearn\preprocessing\_data.py:1107, in StandardScaler.inverse_transform(self, X, copy) 1105 else: 1106 if self.with_std: -> 1107 X *= self.scale_ 1108 if self.with_mean: 1109 X += self.mean_ ValueError: non-broadcastable output operand with shape (500,1) doesn't match the broadcast shape (500,28)
03-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值