博客大概咕了很久了.........

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(三分,贪心)的更多相关文章

  1. 「面试高频」二叉搜索树&双指针&贪心 算法题指北

    本文将覆盖 「字符串处理」 + 「动态规划」 方面的面试算法题,文中我将给出: 面试中的题目 解题的思路 特定问题的技巧和注意事项 考察的知识点及其概念 详细的代码和解析 开始之前,我们先看下会有哪些 ...

  2. 「10.14」小P的2048(模拟)·小P的单调数列(性质,DP)·小P的生成树(乱搞)

    A. 小P的2048 模拟.....又没啥可说的,以后要认真打打模拟题了... B. 小P的单调数列 考场$n^2log(n)$的SB思路有人听吗 正解当然不是这样, 事实上我们每次选取的只有一段区间 ...

  3. NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」

    简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...

  4. 别再误解MySQL和「幻读」了

    The so-called phantom problem occurs within a transaction when the same query produces different set ...

  5. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  6. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  7. 2019.8.14 NOIP模拟测试21 反思总结

    模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...

  8. SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

  9. 「C语言」常量和变量的表示、应用和变量命名规则

    在程序运行中,其值不能改变的量成为常量. 在基本数据类型中,常量可分为整型常量.实型常量.符号常量和字符型常量(包括字符常量和字符串常量),现分别介绍如下: 目录: 一.常量 二.C语言标识符 三.变 ...

随机推荐

  1. 如何实现一个 System Services?

    <Android 系统开发做什么?>写到 Android System Services 是专注于特定功能的模块化组件,应用框架 API 所提供的功能可与系统服务通信,以访问底层硬件.An ...

  2. JVM垃圾回收器总结

    常见七种垃圾回收器以及使用的垃圾回收算法总结:

  3. 改善c++程序的150个建议(读后总结)-------27-35

    27. 区分内存分配的方式 c++中内存分为5个不同的区 ①栈区 栈是一种特殊的数据结构,其存取数据特点为(先进后出,后进先出).栈区中主要用于存储一些函数的入口地址,函数调用时的实参值以及局部变量. ...

  4. 一看就懂的MySQL的聚簇索引,以及聚簇索引是如何长高的

    这一篇笔记我们简述一下 MySQL的B+Tree索引到底是咋回事? 聚簇索引索引到底是如何长高的. 一点一点看,其实蛮好理解的. 如果你看过了我之前的笔记,你肯定知道了MySQL进行CRUD是在内存中 ...

  5. linux系统瓶颈分析(精) CPU Memory IO Network

    linux系统瓶颈分析(精) linux系统瓶颈分析(精) (2013-09-17 14:22:00)   分类: linux服务器瓶颈分析 1.0 性能监控介绍性能优化就是找到系统处理中的瓶颈以及去 ...

  6. nginx 日志管理配置详解

    nginx的日志管理 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$statu ...

  7. Python应用与实践-转自(吴秦(Tyler))

    1.      Python是什么? 1.1.      Python语言 1.2.      Python哲学 2.      Python在工作中的应用 2.1.      实例1:文件批量处理 ...

  8. IEEE 网址

    https://ieeexplore.ieee.org/document/506397

  9. Python3冒泡排序

    练习:将路径为 D:\data.txt 的文件读取,并取出数字部分进行排序(不能使用内置排序方法),这里我们使用冒泡排序法 文件读取并取出数字部分(略) 一:什么叫冒泡排序 冒泡排序(Bubble S ...

  10. 树莓派 PICO基础教程(基于MicroPython)

    目录 1 树莓派 PICO 简介 1.1 简介 1.2 配置 [^2] 1.3 引脚图 1.4 尺寸 2 安装 2.1 烧录固件 2.2 安装IDE(Thonny IDE) 2.3 离线运行程序 3 ...