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语言标识符 三.变 ...
随机推荐
- VS2010编写32位和64位dll环境配置,以及判断dll是多少位
前言 最近在编写dll注入程序的时候,因为想注入到系统进程,结果发现总是注入失败.自闭了好长一会发现我忘记了我的系统是64位的,系统进程也是64位的,而我编写的待注入的DLL是32位了,所以才导致失败 ...
- java设计模式之单例模式你真的会了吗?(懒汉式篇)
java设计模式之单例模式你真的会了吗?(懒汉式篇) 一.什么是单例模式? 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供 ...
- repo sync error: .repo/manifests/: contains uncommitted changes
andorid 源码库同步,报错如标题,好几次想放弃,尝试了网上不少办法,无效, 最终从 stackoverflow 得到答案: After issued repo sync, I got a err ...
- mysql整型后面的()宽度
int(5)这个5表示显示宽度 如果超出宽度则正常显示,所以人为指定显示宽度意义不大
- 并发王者课 - 青铜4:synchronized用法初体验
在前面的文章<双刃剑-理解多线程带来的安全问题>中,我们提到了多线程情况下存在的线程安全问题.本文将以这个问题为背景,介绍如何通过使用synchronized关键字解这一问题.当然,在青铜 ...
- [Linux] 完全卸载mysql
参考 https://www.jianshu.com/p/ef58fb333cd6
- [刷题] 46 Permutations
要求 整型数组,每个元素不相同,返回元素所有排列的可能 示例 [1,2,3] [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路 树 ...
- KVM 添加新硬件
1 显卡 spice 2视频 qxl驱动 3 声音 ich6最好 ich9最清楚 4 输入 鼠标 智能图 否则不能VNC找不到焦点 5 磁盘大小 至少80G 否则 无法自动安装 无swap和 ...
- dpkg -S {file} #ubuntu 14.04 rpm -qf {file} #centos 7
Linux查找命令或组件对应安装包的方法原创FJEagle 最后发布于2017-12-15 19:10:06 阅读数 4603 收藏展开Linux查找命令或组件对应安装包的方法当新搭建服务器或者维护不 ...
- Linux如何设置用户登录超时(闲置时间)vi /etc/profile ... export TMOUT=900
Linux如何设置用户登录超时(闲置时间) 转载莫负寒夏ai 最后发布于2019-08-08 15:04:22 阅读数 1897 收藏 展开 1. 针对所有用户 # vi /etc/profile ...