csp-s模拟测试「9.14」A·B·C(三分,贪心)
博客大概咕了很久了.........
T1 A
大概推下式子就好了,考试时数据点分治DFS前30点T了,然后后70分因为两数相乘爆long long然后本来可以A掉,就WA零了.......
式子推出来肯定能化成S*B^n+A*B^x+A*B^y.........
我们可以看出划出这样的式子,那么首先肯定要乘n次,即S乘的B的系数,然后加的操作就是剩下式子的系数和
当然n是大于x,y.....因为S是肯定要被乘最多次的
然后在求系数时考虑求lca的那种打法
如果确定T-S*B^n可以整除A那么肯定能拆分成若干个这样的数相加的形式
所以直接求即可
注意乘爆long long
1 #include<bits/stdc++.h>
2 #define int long long
3 #define MAXN 100000100
4 using namespace std;
5 int S,T,A,B;int ans=0;int TT;
6 int b[MAXN];int minn=0x7ffffffff;
7 int min1(int x,int y){
8 if((double)x>(double)y)return y;
9 return x;
10 }
11 void work1(){
12 b[0]=A;
13 int ptt=1;TT=T;
14 while(1){
15 if((b[ptt-1]/A)>(T/B)+1)break;
16 b[ptt]=b[ptt-1]*B;
17 ptt++;
18 }
19 ptt--;
20 int me=0;int ok=0;
21 for(int i=ptt;i>=0;--i){
22 me=b[i]/A;
23 ans=0;
24 T=TT;
25 if(S<=(T/me+1)&&(T-S*me)%A==0){
26 ok=i;ans=i;T-=S*me;
27 for(int j=ok;j>=0;--j){
28 if(T>=b[j]){
29 ans=ans+T/b[j];
30 T-=T/b[j]*b[j];
31 }
32 }
33 minn=min1(minn,ans);
34 break;
35 }
36 }
37 printf("%lld\n",minn);
38 }
39 signed main(){
40 scanf("%lld%lld%lld%lld",&S,&T,&A,&B);
41 work1();
42 }
T2 B
不会,咕了
T3 C
首先对于p<=30的数据我们可以直接循环需要多少个特殊加热器
然后贪心处理最少花费
贪心的话,对于当前位置,只要找到能覆盖其的最大范围将其覆盖上,当然也有可能无法覆盖,就只能用
特殊用电器,至于区间修改,线段树即可。
然后可以考虑三分
对于当前1-n的区间来说,我们在一开始用超级用电器,可能会使使用正常用电器的费用减少
但是随着超级用电器的使用次数增加,会有一些节点已经达到所要P值
所以,费用减少的速度越来越少
那么我们就可以发(da)现(biao)这是个三分函数,直接三分即可
1 #include<bits/stdc++.h>
2 #define MAXN 110000
3 #define int long long
4 using namespace std;
5 int read(){
6 int x=0;char c=getchar();
7 while(c<'0'||c>'9')c=getchar();
8 while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
9 return x;
10 }
11 struct node{int l,r,p,f;}t[4*MAXN];int n,m,T;
12 struct no{int l,r;}e[MAXN];int p[MAXN];
13 int v[MAXN][2];
14 void build(int k,int l,int r){
15 t[k].l=l;t[k].r=r;t[k].f=0;
16 if(l==r){t[k].p=p[l];return ;}
17 int mid=(l+r)>>1;
18 build(k*2,l,mid);
19 build(k*2+1,mid+1,r);
20 }
21 void down(int k){
22 t[k*2].f+=t[k].f;t[k*2+1].f+=t[k].f;
23 t[k*2].p+=t[k].f;t[k*2+1].p+=t[k].f;
24 t[k].f=0;
25 }
26 void add(int k,int l,int r,int x){
27 if(l<=t[k].l&&r>=t[k].r){
28 t[k].p+=x;t[k].f+=x;
29 return ;
30 }
31 if(t[k].f)down(k);
32 int mid=(t[k].l+t[k].r)>>1;
33 if(l<=mid)add(k*2,l,r,x);
34 if(r>mid)add(k*2+1,l,r,x);
35 }
36 int ask(int k,int x){
37 if(t[k].l==t[k].r)return t[k].p;
38 int mid=(t[k].l+t[k].r)>>1;
39 if(t[k].f)down(k);
40 if(x<=mid)return ask(k*2,x);
41 else return ask(k*2+1,x);
42 }
43 int minn=0x7fffffffff;int ans=0;int maxn_id=0,maxn_r=0;
44 int work(int wb){
45 ans=0;
46 maxn_id=0;maxn_r=0;
47 build(1,1,n);
48 add(1,1,n,-wb);
49 ans=ans+T*wb;
50 for(int i=1;i<=n;++i){
51 int id=v[i][1];
52 if(e[id].r>maxn_r){
53 maxn_r=e[id].r;maxn_id=id;
54 }
55 int me=ask(1,i);
56 if(maxn_r<i&&me>0){
57 ans+=T*me;add(1,1,n,-me);
58 }
59 else if(me>0){
60 ans+=me;
61 add(1,e[maxn_id].l,e[maxn_id].r,-me);
62 }
63 }
64 minn=min(ans,minn);
65 return ans;
66 }
67 int ma=0;
68 void third_divide(){
69 int l=0;int r=ma;
70 while(l+2<r){
71 int mid=l+(r-l)/3;
72 int midd=r-(r-l)/3;
73 if(work(mid)>work(midd)){l=mid;}
74 else r=midd;
75 }
76 minn=min(minn,work(l));
77 minn=min(minn,work(l+1));
78 minn=min(minn,work(r));
79 printf("%lld\n",minn);
80 }
81 signed main(){
82 n=read();m=read();T=read();
83 for(int i=1;i<=n;++i){
84 p[i]=read();ma=max(ma,p[i]);
85 }
86 for(int i=1;i<=m;++i){
87 e[i].l=read();e[i].r=read();
88 if(e[i].r>v[e[i].l][0]){
89 v[e[i].l][0]=e[i].r;
90 v[e[i].l][1]=i;
91 }
92 }
93 third_divide();
94 }
95 /*#include<bits/stdc++.h>
96 #define int long long
97 using namespace std;
98 int random(int x){return rand()%x;}
99 int gcdd(int x,int y){
100 return (y==0)?x:gcdd(y,x%y);
101 }
102 signed main(){
103 freopen("text.in","w",stdout);
104 srand((unsigned)time(0));
105 int n=4;int m=4;int T=10000;
106 printf("%lld %lld %lld\n",n,m,T);
107 for(int i=1;i<=n;++i){
108 printf("%lld ",random(4)+1);
109 }
110 cout<<endl;
111 for(int i=1;i<=m;++i){
112 int r=random(n)+1;
113 printf("%lld %lld\n",random(r)+1,r);
114 }
115 }
116 */
csp-s模拟测试「9.14」A·B·C(三分,贪心)的更多相关文章
- 「面试高频」二叉搜索树&双指针&贪心 算法题指北
本文将覆盖 「字符串处理」 + 「动态规划」 方面的面试算法题,文中我将给出: 面试中的题目 解题的思路 特定问题的技巧和注意事项 考察的知识点及其概念 详细的代码和解析 开始之前,我们先看下会有哪些 ...
- 「10.14」小P的2048(模拟)·小P的单调数列(性质,DP)·小P的生成树(乱搞)
A. 小P的2048 模拟.....又没啥可说的,以后要认真打打模拟题了... B. 小P的单调数列 考场$n^2log(n)$的SB思路有人听吗 正解当然不是这样, 事实上我们每次选取的只有一段区间 ...
- NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」
简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...
- 别再误解MySQL和「幻读」了
The so-called phantom problem occurs within a transaction when the same query produces different set ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
- 「C语言」常量和变量的表示、应用和变量命名规则
在程序运行中,其值不能改变的量成为常量. 在基本数据类型中,常量可分为整型常量.实型常量.符号常量和字符型常量(包括字符常量和字符串常量),现分别介绍如下: 目录: 一.常量 二.C语言标识符 三.变 ...
随机推荐
- @Aspect 注解使用详解
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...
- Powershell阻止确认
要阻止弹出确认提示,需要设置-Confirm为false, new-VM -Name $hostname -Template $template -VMHost 10.11.31.5 -OSCusto ...
- [bug] IDEA 右侧模块灰色
参考 https://blog.csdn.net/weixin_44188501/article/details/104717177
- 用nvm的方式安装node
一.nvm简介 Node Version Manager(Node版本管理工具)由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理. nvm的安 ...
- 【Git】git clone报错 git fatal: Unable to find remote helper for 'https'
[参考资料] https://stackoverflow.com/questions/8329485/unable-to-find-remote-helper-for-https-during-git ...
- centos 6 x64 yum(sohu)
centos 6 x64 yum(sohu) weixin_34405354 2012-08-23 10:07:35 24 收藏 文章标签: 运维 版权 [base] name=Base baseur ...
- Linux 系统优化-workstation实践
Linux 系统优化 关闭SELinux [root@workstation ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/seli ...
- Pulsar 下一代消息平台
引言 提起成熟的消息队列或消息引擎,毋庸置疑,大多数人的第一反应一定是 Kafka. Kafka 能够彻底满足海量数据场景下高吞吐.高并发需求,在短短几年内,已经被阿里.腾讯.百度.字节跳动.Netf ...
- Centos 7 进入单用户模式更改root密码方法
进入单用户模式的方法 方法一: 1.开机进入grub菜单的时候上下选择,按e编辑. 到linux16所在行的最后面. ro 只读文件系统 biosdevname=0 戴尔的服务器需要设置 net.if ...
- IT菜鸟之总结(Du teacher)
初次接触云计算,从以前对计算机的一窍不通,经过这三周的学习,起码是通了一窍了:哈哈,至少是对计算机的组成及系统的安装都有了认识,也初次学习了Linux系统,对其的发展和使用有了认识,也学到了一些基础的 ...