难度不高的一场Div2...(相比较于平时的Div2
因为E题官方给出的难度系数只有2100
一般D题都比这个要高了吧。。
链接

A. The Fair Nut and Elevator

暴力
读题意题
数据范围很小 直接暴力枚举一开始在哪里 直接按照题意模拟去最小值即可

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=110;
int a[N];

int main(){
    int n;scanf("%d",&n);
    fr(i,1,n) scanf("%d",&a[i]);
    int ans=1e8;
    fr(i,1,100){
        int pos=0;
        fr(j,1,n){
            pos+=(abs(j-i)+(j-1)+abs(i-1)+abs(i-1)+abs(j-1)+abs(i-j))*a[j];
        //  if(i==2) printf("%d %d\n",j,pos);
        }
        ans=min(ans,pos);
        //if(ans==pos) printf("%d %d\n",i,ans);
    }
    printf("%d\n",ans);
    return 0;
}

B.Kvass and the Fair Nut

贪心

题意: 你有\(n\)桶酒 第\(i\)桶酒有\(v_i\)升酒 每次你可以将任意一桶有酒的桶里倒1升到一个杯子里 要求杯子里的酒有\(s\)升 (一开始为空
问最后每桶酒中最少的最大是多少

题解: 酒的总量是一定的 所以先找出一开始每桶酒里的最小值 然后与\(\frac{s-sum}{n}\)比较即可

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=1e3+10;
LL a[N];

int main(){
    int n;LL m;scanf("%d%lld",&n,&m);
    LL sum=0,minn=1e18;
    fr(i,1,n) scanf("%lld",&a[i]),sum+=a[i],minn=min(minn,a[i]);
    if(sum<m) return printf("-1\n"),0;
    printf("%lld\n",min(minn,(sum-m)/n));
    return 0;
}

C.The Fair Nut and String

题意: 给你一个字符串\(s\) 让你找到满足一下条件的\(p\)数组数量
- 记\(p\)的长度为\(k\) 对于\(1 \leq i \leq k\) 都有\(s_{p_i}='a'\)
- 对于\(1 \leq i \leq k-1\) 存在\(p_i < j < p_{i+1}\) 使得\(s_j='b'\)

题解: 被b分开的a段 第\(t\)段设a的数量为\(tmp_t\) 则答案为$(tmp_1+1)×(tmp_2+1)...×(tmp_{tot}+1) -1 $

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=1e5+10;
const int mod=1e9+7;
char lx[N];

void Mul(LL &x,LL y){
    x=x*y%mod;
}

void Add(LL &x,LL y){
    x=(x+y)%mod;
}

int main(){
    scanf("%s",lx+1);
    int len=strlen(lx+1);
    LL pos=1,tmp=0;
    fr(i,1,len){
        if(lx[i]=='a') tmp++;
        if(lx[i]=='b'){
            Mul(pos,tmp+1);
            tmp=0;
        }
    }
    Mul(pos,tmp+1);
    pos--;
    printf("%lld\n",pos);
    return 0;
}

D.The Fair Nut and the Best Path

树型DP
题意: 在一棵树上求一条路径 使得点权+边权最大 从一点出发如果点权+边权<0了就不能走了

题解: 如果 从\(u\)到\(v\) 和 \(v\) 到 \(u\) 是不一样的 那么肯定出现了点权+边权<0的情况了
很明显 如果点权+边权<0了我们也没有必要再往下走 为什么不看开一点从点权+边权<0的那个地方开始呢初始值是0肯定比负数要优啊
所以..直接按照像直径那样求就行了 小于0的不用加上去QwQ

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=3e5+10;
struct data{
    int nt,to;LL w;
}a[N<<1];
int head[N],cnt=0;
LL v[N],maxn=0;

void add(int x,int y,LL w){
    a[++cnt].to=y,a[cnt].w=w,a[cnt].nt=head[x],head[x]=cnt;
    a[++cnt].to=x,a[cnt].w=w,a[cnt].nt=head[y],head[y]=cnt;
}

LL dp(int u,int fa){
    LL tmp=0,kk=0;
    for(int i=head[u];i;i=a[i].nt){
        int to=a[i].to;
        if(to==fa) continue;
        LL res=dp(to,u);
        if(res-a[i].w<=0) continue;
        kk=max(kk,tmp+res-a[i].w+v[u]);
        tmp=max(tmp,res-a[i].w);
    }
    maxn=max(maxn,v[u]);
    maxn=max(maxn,kk);
    return tmp+v[u];
}

int main(){
    int n;scanf("%d",&n);
    fr(i,1,n) scanf("%lld",&v[i]);
    fr(i,2,n){
        int x,y;LL w;
        scanf("%d%d%lld",&x,&y,&w);
        add(x,y,w);
    }
    dp(1,0);
    printf("%lld\n",maxn);
    return 0;
}

E.The Fair Nut and Strings

分类讨论 计数问题
我会告诉你我vp的时候题意都没读懂吗
题意:
给你两个数\(n,k\)还有两个长度为\(n\)的字符串\(s\),\(t\)
s的字典序小于等于t
求\([s,t]\)之间选出k个串 不同前缀的数目最大是多少
所有的串都只有a b两种字符构成
题解:
相当于你有很多种选择\(k\)个串的方法,每一种方法都对应了一个不同前缀的数量,求所有方法中最大的一个
如果先找好\(k\)个串 再去计算前缀 告辞!
我们可以考虑 算每一种长度的前缀在最终答案中被算到了几次

设前\(i\)位不同的前缀有\(f_i\)个

考虑字典序问题,根据\(s\),\(t\)两个字符串的第\(i+1\)位的情况我们可以分类讨论四种情况

  • \(s[i+1] = `a`, t[i+1] = `b`\)
    \(f_{i+1}=f_i*2\) 显然前面\(i\)位之后接ab都是合法的

  • \(s[i+1] = `a`, t[i+1] = `a`\)
    \(f_{i+1}=f_i*2 - 1\) 除了前面\(i\)位字典序最大的串后面不能接b , 其他都可以随意的接上ab

  • \(s[i+1] = ‘b’, t[i+1] = ‘b’\)
    \(f_{i+1}=f_i*2 - 1\) 除了前面\(i\)位字典序最小的串后面不能接a,其他都可以随意的接上ab

  • \(s[i+1] = ‘b’, t[i+1] = ‘a’\)
    \(f_{i+1}=f_i*2 - 2\) 同理23333333333333333333333333333333333333333

#include<bits/stdc++.h>
#define fr(i,x,y) for(int i=x;i<=y;++i)
#define rf(i,x,y) for(int i=x;i>=y;--i)
#define LL long long
using namespace std;
const int N=5e5+10,mod=1e9+7;
char lx[N],ll[N];
LL maxn=1e18;

int main(){
    int n;LL k;scanf("%d%lld",&n,&k);
    scanf("%s%s",lx+1,ll+1);
    LL r=1,ans=0;int pd=0;
    fr(i,1,n){
        if(lx[i]<ll[i]) pd=1;
        if(pd){
            if(lx[i]==ll[i]) r=r*2-1;
            else if(lx[i]=='a'&&ll[i]=='b') r=r*2;
            else r=r*2-2;
        }
        ans+=min(r,k);
        r=min(r,maxn);
    }
    printf("%lld\n",ans);
    return 0;
}

完结撒花花~

Codeforces1084 | Round526Div2 | 瞎讲报告的更多相关文章

  1. Codeforces1101 | EducationalRound58 | 瞎讲报告

    目录 Educational Codeforces Round 58 (Rated for Div. 2) A. Minimum Integer B. Accordion C. Division an ...

  2. Codeforces70 | Codeforces Beta Round #64 | 瞎讲报告

    目录 前言 正文 A B C D E 前言 这个毒瘤的517 放了Div1 然后D题是昨天讲的动态凸包(啊喂!我还没来的及去写 结果自己想的是二分凸包 (当然没有写出来 写完前两题之后就愉快地弃疗 C ...

  3. Codeforces1151E,F | 553Div2 | 瞎讲报告

    传送链接 E. Number of Components 当时思博了..一直在想对于\([1,r]\)的联通块和\([1,l-1]\)的联通块推到\([l,r]\)的联通块...我真的是傻了..这题明 ...

  4. AtCoder | ARC103 | 瞎讲报告

    目录 ARC 103 A.//// B.Robot Arms C.Tr/ee D.Distance Sums ARC 103 窝是传送门QwQ A.//// 题意 : 给你\(n\)(\(n\)为偶数 ...

  5. AtCoder | ARC102 | 瞎讲报告

    目录 ARC102 前言 正文 传送链接~ ARC102 前言 实在是太菜了....写完第一题就弃疗..感觉T3好歹也是道可做题吧!!然后T2怎么又是进制拆分! 正文 A 题意 给你两个数字\(n,k ...

  6. 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)

    [背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...

  7. [NOIP2018模拟赛10.25]瞎搞报告

    闲扯 最近有点颓,都修到好晚,早上起来和吔shi一样难受 忍着困意把题面看完,发现啥也不会,又是一场写暴力的模拟赛 T1发现似乎可以DP,顺手码了个 T2像个最小瓶颈路板子,但是只做过N^2算法的.. ...

  8. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  9. SQL Server数据库定时自动备份

    SQL Server 数据库定时自动备份[转]   在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求 ...

随机推荐

  1. ArcGis API for JavaScript学习——加载地图

    ArcGis API for JavaScript开发笔记——加载地图 在这个例子中使用的离线部署的API(请参见 http://note.youdao.com/noteshare?id=f42865 ...

  2. 【2015蓝桥杯省赛】C++ B组试题

    1.奖券数目 作答:52488,正确 #include <iostream> using namespace std; bool check(int x) { ] = { }; while ...

  3. 你不知道的css高级应用三种方法——实现多行省略

    前言 这是个老掉牙的需求啦,不过仍然有很多人在网上找解决方案,特别是搜索结果排名靠前的那些,都是些只会介绍兼容性不好的使用-webkit-line-clamp的方案. 如果你看到这篇文章,可能代表你正 ...

  4. QoS policy-map class-map

    QoS(Quality of ServiceQoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力, 是网络的一种安全机制, 是用来 ...

  5. 在element-ui的select下拉框加上滚动加载

    在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...

  6. MariaDB快速批量插入数据的几种办法

    前言 当要向MariaDB中插入新的数据时,以下过程会影响插入所消耗的时间:(按时间消耗长短降序排序) 将数据sync到磁盘上(它是事务结束的一部分) 添加新的键值.索引越大,更新键值所消耗的时间就越 ...

  7. Win10/Ubuntu双系统安装常见问题

    目录 1.win10重启无法进入BIOS 2.install ubuntu后黑屏 2.1 解决安装黑屏 2.2 安装英伟达显卡驱动 3.ubuntu中文系统注意 4.Windows系统时间异常 4.1 ...

  8. Linux下onvif客户端获取h265 IPC摄像头的RTSP地址

    1. 设备搜索,去获取webserver 的地址 ,目的是在获取能力提供服务地址,demo:https://www.cnblogs.com/croxd/p/10683429.html 2. GetCa ...

  9. C语言学习记录_2019.02.06

    break语句的作用:当执行到break,则跳出循环,免去不必要的循环次数,节省时间和资源.-----跳出循环,结束循环: continue:跳过这一次循环剩下的语句,进入到下一轮循环.-----跳到 ...

  10. SEO优化上首页之搜索引擎蜘蛛Spider原理

    Spider,蜘蛛,又名网页网络爬虫.网络机器人,是按照一定策略不断抓取互联网网页的特定程序.蜘蛛抓回的页面创建索引后参与排名,等待用户检索.为了网站优化自然排名上首页,精灵儿工作室下面详细剖析Spi ...