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

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. ArcGIS JS API使用PrintTask打印地图问题解决汇总

    环境:来源于工作过程,使用的API是  arcgis js 3.*  3系API,4.*暂时没测试: 1.数据与打印服务跨域情况下,不能打印问题. 一般情况下,我们发布的数据服务和打印服务是在一台服务 ...

  2. C++ primer plus读书笔记——第6章 分支语句和逻辑运算符

    第6章 分支语句和逻辑运算符 1. 逻辑运算符的优先级比关系运算符的优先级低. 2. &&的优先级高于||. 3. cctype中的函数P179. 4. switch(integer- ...

  3. 【敏杰开发】Beta阶段事后分析

    [敏杰开发]Beta阶段事后分析 设想和目标 Q 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们达到目标了么(原计划的功能做到了几个? 按照原计划交付时间交付 ...

  4. If-Else 太多,如何优化!!!

    完全不必要的 Else 块 public void consumer(int product) { if (product > 1) { // do something } else { // ...

  5. 『动善时』JMeter基础 — 23、JMeter中使用“用户自定义变量”实现参数化

    目录 1.用户自定义变量介绍 2.使用"用户自定义变量"实现参数化 (1)测试计划内包含的元件 (2)数据文件内容 (3)测试计划界面内容 (4)线程组元件内容 (5)CSV数据文 ...

  6. [刷题] 167 Two Sum II

    要求 升序数组 找到两个数使得它们相加之和等于目标数 函数返回两个下标值(下标从1开始) 示例 输入:numbers = [2, 7, 11, 15], target = 9 输出:[1,2] 思路 ...

  7. 云计算OpenStack环境搭建(4)

    准备工作: 准备3台机器,确保yum源是可用的,分别为控制节点(192.168.11.3).计算节点(192.168.11.4)和存储节点(192.168.11.5) 控制节点:OpenStack日常 ...

  8. cgic: CGI的C函数库-(转自COS)

    下载回源码包以后,就3个文件:cgic.c      函数库capture.c   一个很简单的CGI例子,仅仅输出两行提示文字cgictest.c  一个演示读取form表单数据的CGI例子 首先在 ...

  9. 抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext

    长话短说,本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext 引言 C#异步编程语法糖async/await,使开发者很容易就能编写异步代码. ...

  10. Nginx实战部署常用功能演示(超详细版),绝对给力~~~

    前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...