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

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. OO_Unit4_UML模型化设计

    CSDN博客传送门 @ 目录 一.架构设计 (一)第一次作业 作业需求分析 建立类图 bug修复 (二)第二次作业 作业需求分析 建立类图 checkForUml002实现方式 checkForUml ...

  2. Gin框架介绍与使用

    Gin // 初识 Gin框架 //下载(可能会下载不全.缺什么get什么即可) //go get -u -v github.com/gin-gonic/gin package main import ...

  3. ES6学习-5 解构赋值(2)对象的解构赋值

    啥也不说,先举个栗子: 1 let { myname, myage } = { myage: 18, myname: "郭郭" }; 2 console.log(myname) / ...

  4. [DB] 大数据集群安装

    学习要点 体系架构.原理 多做练习.试验 装虚拟机 网络模式:仅主机模式 software selection:development tools, GUI network & host na ...

  5. Linux 操作系统(四)用户组管理&进程管理&任务调度

    以下实例均在Centos7下验证 Centos7 查看命令帮助 man xxx 用户组管理 useradd useradd user1 password user1 cat /etc/passwd # ...

  6. 使用nmcli命令配置网络

    !!!前言 nmcli是redhat7或者centos7之后的命令该命令可以完成网卡上所有的配置工作,并且可以写入配置文件,永久生效 1.NetworkManager NetworkManager是管 ...

  7. 无法开机 如果您的手机黑屏无法开机,可以按照以下方式操作尝试: 如果是,使用原装充电器或使用弱电流方式充电(例如使用电脑USB接口充电)充电15-30分钟后尝试重新开机;注意:电量过低引起的无法开机,刚插入充电器时可能不亮屏但呼吸灯闪烁状态。

    https://www.mi.com/service/support/startup 无法开机 如果您的手机黑屏无法开机,可以按照以下方式操作尝试: 技术支持 如何刷机 无法开机 手机自动关机.重启 ...

  8. 第七章 DevOps工具链

    DevOps工具生态圈 协同开发工具 敏捷开发 可视化 加强团队沟通协作 数据分析 协同开发 持续集成工具 Jenkins 自动化编译 自动化测试 自动化部署 丰富的插件库 版本管理工具 Git 简介 ...

  9. Windows上能看朋友圈的微信来了 | 附下载地址

    昨天的时候,电脑端的微信提示更新就顺手更新了一下,更新完成后习惯性的点了下设置,纳尼,居然被灰到了测试版本? 带着好奇,赶快看了下更新了什么内容: 支持浏览朋友圈 "搜一搜"支持搜 ...

  10. Spring Cloud 升级之路 - 2020.0.x - 7. 使用 Spring Cloud LoadBalancer (2)

    本项目代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Spri ...