二模 (6) day1

第一题:

设 S(N)表示 N 的各位数字之和,如 S(484)=4+8+4=16,S(22)=2+2=4。如果一个正整数 x满足 S(x*x)=S(x)*S(x),我们称 x 为 Rabbit Number。比方说,22 就是一个 Rabbit Number,因为 S(484)=S(22)*S(22)。
现在,给出一个区间[L,R],求在该区间内的 Rabbit Number 的个数。  1≤L≤R≤10^9

 

解题过程:

1.首先爆搜把表给打了出来([1,10^9] 跑了5分钟)。。然后发现所有的rabbit number 各个数位不会超过3。。 不会严谨的证明,但是想想应该是对的。。

设数X某一位是 5 ,5*5=25, 那么数字5对(S(X*X))贡献值是2+5=7远小于25。

2.那么枚举9位的4进制数即可。。还有一个10位数10^9也是rabbit number。 时间复杂度(4^9)轻松过。

3.题解上说一个数是rabbit number 当且仅当平方的时候没有出现进位,不知道为什么。。。不过枚举的方法已经够快了。

初始得分100.

 


 

第二题:

题目大意:给出A,B, 两个人轮流,每次给A或者B 加上1,如果 A 大于给定的N就输了。。判断必胜者或者平局。1≤N≤10^8

 

解题过程:

1.首先容易看出这是个博弈问题,且状态集有限。

2.直接根据必胜态必败态来保存状态。F[i][j]表示当轮到某个人时,A=i,B=j,他是必胜还是必败。。 根据“一个状态是必败态当且仅当它的所有后继是必胜态”的原则转移状态。

3.细节处理:当B=1的时候,有可能两个人一直轮流给A+1,那么递归太多,系统栈就要爆掉了。所以加一个奇偶性剪枝,当B=1 && A*A>N的时候,肯定不会去+B,不然就输了。所以根据(N-A)的奇偶性就可以提前判断谁必胜了。。(不过极限数据还是会卡掉的,N=10^8,A=B=1)最多要递归10^4层。

4.最好其实还是用递推来写。不过记忆化也能AC。。没有极限数据。

初始得分0分。

 


 

第三题:

题目描述:在一条数轴上有 N 个点,分别是 1~N。一开始所有的点都被染成黑色。接着我们进行 M 次操作,第 i 次操作将[Li,Ri]这些点染成白色。请输出每个操作执行后剩余黑色点的个数。 

 

解题过程:

1.裸的线段树额。不过要打个lazy_tag。

2.其实可以不用打lazy_tag,因为没有删除操作,那么如果当前区间已经被完全覆盖过了,那么就可以直接return了。速度比lazy_tag版本的快一半。。(好吧其实是懒,连懒人标记都懒得写了。)

转载于:https://www.cnblogs.com/vb4896/p/3996463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请逐条解释分析下面这段程序:ops=sdpsettings('solver','cplex'); solvesdp(C,-f,ops); Pc=[double(Pc1),double(Pc2),double(Pc3)]; Pb=double(Pb); Ps_day=double(Ps_day); Pb_day=double(Pb_day); S=double(S); Pch=double(Pch); Pdis=double(Pdis); Cost_total=double(f) Price_Charge=double(Ce); Ce=sdpvar(24,1);%电价 z=binvar(24,1);%购售电状态 u=binvar(24,1);%储能状态 Pb=sdpvar(24,1);%日前购电 Pb_day=sdpvar(24,1);%实时购电 Ps_day=sdpvar(24,1);%实时售电 Pdis=sdpvar(24,1);%储能放电 Pch=sdpvar(24,1);%储能充电 Pc1=sdpvar(24,1);%一类车充电功率 Pc2=sdpvar(24,1);%二类车充电功率 Pc3=sdpvar(24,1);%三类车充电功率 S=sdpvar(24,1);%储荷容量 for t=2:24 S(t)=S(t-1)+0.9*Pch(t)-Pdis(t)/0.9; end %内层 CI=[sum(Pc1)==50*(0.9*24-9.6),sum(Pc2)==20*(0.9*24-9.6),sum(Pc3)==10*(0.9*24-9.6),Pc1>=0,Pc2>=0,Pc3>=0,Pc1<=50*3,Pc2<=20*3,Pc3<=10*3,Pc1(index1)==0,Pc2(index2)==0,Pc3(index3)==0];%电量需求约束 OI=sum(Ce.*(Pc1+Pc2+Pc3)); ops=sdpsettings('solver','gurobi','kkt.dualbounds',0); [K,details] = kkt(CI,OI,Ce,ops);%建立KKT系统,Ce为参量 %外层 CO=[lb<=Ce<=ub,mean(Ce)==0.5,Pb>=0,Ps_day<=Pdis,Pb_day>=0,Pb_day<=1000*z,Ps_day>=0,Ps_day<=1000*(1-z),Pch>=0,Pch<=1000*u,Pdis>=0,Pdis<=1000*(1-u)];%边界约束 CO=[CO,Pc1+Pc2+Pc3+Pch-Pdis==Pb+Pb_day-Ps_day];%能量平衡 CO=[CO,sum(0.9*Pch-Pdis/0.9)==0,S(24)==2500,S>=0,S<=5000];%SOC约束 OO=-(details.b'*details.dual+details.f'*details.dualeq)+sum(price_s.*Ps_day-price_day_ahead.*Pb-price_b.*Pb_day);%目标函数 optimize([K,CI,CO,boundingbox([CI,CO]),details.dual<=1],-OO) Ce=value(Ce);%电价 Pb=value(Pb);%日前购电 Pb_day=value(Pb_day);%实时购电 Ps_day=value(Ps_day);%实时购电 Pdis=value(Pdis);%储能放电 Pch=value( Pch);%储能充电 Pb_day=value(Pb_day);%实时购电 Pb_day=value(Pb_day);%实时购电 Pc1=value(Pc1);%一类车充电功率 Pc2=value(Pc2);%二类车充电功率 Pc3=value(Pc3);%三类车充电功率 S=value(S);%储荷容量 figure(1) plot(Pc1,'-*','linewidth',1.5) grid hold on plot(Pc2,'-*','linewidth',1.5) hold on plot(Pc3,'-*','linewidth',1.5) title('三类电动汽车充电功率') legend('类型1','类型2','类型3') xlabel('时间') ylabel('功率') figure(2) bar(Pdis,0.5,'linewidth',0.01) grid hold on bar(Pch,0.5,'linewidth',0.01) hold on plot(S,'-*','linewidth',1.5) axis([0.5 24
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值