D - Iroha and Haiku (New ABC Edition)

题意: 找一个最少含有三个点的区间,将区间分成三块,三块的和分别为p,q,r,问是否存在这样的区间

题解:先预处理一遍前缀和,和每一个前缀和出现的位置,然后从前往后遍历,每次遍历当前位置的前缀和,如果当前位置的前缀和>=(p+q+r),那么就有可能存在符合条件的区间,在看是否存在前缀和为

sum-p-q-r的点,如果有再判断区间内部是否符合即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll a[N],sum[N];
ll n,p,q,e;
unordered_map<ll,ll> mp;
bool check(ll l,ll r){
ll le=0;
ll b[3]={p,q,e};
ll cnt=0;
for(ll i=l;i<=r;i++){
le+=a[i];
if(le==b[cnt]) cnt++,le=0;//如果相等就看下一个区间
else if(le>b[cnt]) return 0;//如果大于了就证明这个区间不符合条件
}
return 1;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>p>>q>>e;
for(ll i=1;i<=n;i++){
cin>>a[i];sum[i]=sum[i-1]+a[i];
mp[sum[i]]=i;
}
for(ll i=1;i<=n;i++){
if(sum[i]==p+q+e){
if(check(1,i)){
cout<<"Yes"<<endl;return 0;
}
}
if(sum[i]>p+q+e){
if(!mp[sum[i]-p-q-e]) continue;
if(check(mp[sum[i]-p-q-e]+1,i)){
cout<<"Yes"<<endl;return 0;
}
}
}
cout<<"No"<<endl;
}

E - Warp

题意: 给出四种移动的方向,每次选择一种,有m个障碍,不能传送到障碍上,问在进行n次传送的情况下,有几种移动路径。

题解: 每次四种选择,dp问题,问题在于转移方程,因为已知了最后一共要进行n次传送,所以可以遍历每种方向选择的次数。

dp[ i ][ j ][ z ]表示的是第一种移动i次,第二种j次,第三种z次。

转移方程就让他加上他的前一个状态即可。

//这里用set的速度比mp快

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=2e5+5;
const ll inf=1e18;
const ll mod=998244353;
ll sum[N];
pll px[N];
pll a[N];
ll n,m,dp[305][305][305];
set<pll> mp;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(ll i=1;i<=3;i++) cin>>px[i].first>>px[i].second;
for(ll i=1;i<=m;i++){ cin>>a[i].first>>a[i].second;mp.insert(a[i]);}
ll ans=0;
dp[0][0][0]=1;
for(ll i=0;i<=n;i++)
for(ll j=0;j<=n-i;j++)
for(ll z=0;z<=n-i-j;z++){
if(!i&&!j&&!z) continue;
ll x=i*px[1].first+j*px[2].first+z*px[3].first;
ll y=i*px[1].second+j*px[2].second+z*px[3].second;
if(mp.count({x,y})) continue;//判断是否是障碍
if(i) dp[i][j][z]=(dp[i][j][z]+dp[i-1][j][z])%mod;//与前一个状态相加
if(j) dp[i][j][z]=(dp[i][j][z]+dp[i][j-1][z])%mod;
if(z) dp[i][j][z]=(dp[i][j][z]+dp[i][j][z-1])%mod;
if(i+j+z==n) ans=(ans+dp[i][j][z])%mod;//如果当前的状态是够n个的,就加上
}
cout<<ans;
}

AtCoder Beginner Contest 265(D-E)的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  3. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  8. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

随机推荐

  1. rpm构建流程学习总结

    rpm构建流程 学习链接: b站马哥: https://www.bilibili.com/video/BV1ai4y1N7gp RedHat: https://access.redhat.com/do ...

  2. 记一次学习kibaba踩过的坑(Windows环境)

    下载地址 ElasticSearch:https://www.elastic.co/cn/downloads/elasticsearchLogstash:https://www.elastic.co/ ...

  3. .Net Core 企业微信更新模版卡片消息

    1.搭建回调服务器 可参考:https://www.cnblogs.com/zspwf/p/16381643.html进行搭建 2.编写代码 2.1接口定义 应用可以发送模板卡片消息,发送之后可再通过 ...

  4. 什么是工业仿真?工业3D仿真有什么样的市场价值?

    什么是工业仿真? 工业仿真是对实体工业的一种虚拟,它将实体工业中的各个模块转化成数据整合到一个虚拟的体系中去.这个体系会模拟现实工业作业中的每一项工作和流程,并与之实现各种交互. 工业仿真技术作为目前 ...

  5. 数字格式化的 js 库

    数字格式化的 js 库 Numeral.js,是一个用于格式化数字和处理数字的 js 库. Tip:目前 Star 有 9.2k,5年以前就没有在更新.其文档写得不很清晰,比如它提供了多语言,但如何切 ...

  6. Docker 与 K8S学习笔记(二十五)—— Pod的各种调度策略(上)

    上一篇,我们学习了各种工作负载的使用,工作负载它会自动帮我们完成Pod的调度和部署,但有时我们需要自己定义Pod的调度策略,这个时候该怎么办呢?今天我们就来看一下如何定义Pod调度策略. 一.Node ...

  7. 无语——真的好用到不行的7个Python小技巧

    本文总结了我几个我在学习python过程中,用到的几个超好用的操作,这里分享给大家,我相信你们也会非常喜欢,目录如下.这里提前索要再看,记得点一点再看哦.这只是其中一些技巧,以后会慢慢和大家分享. 1 ...

  8. netty系列之:kequeue传输协议详解

    目录 简介 KQueueEventLoopGroup KQueueEventLoop KQueueServerSocketChannel和KQueueSocketChannel 总结 简介 在前面的章 ...

  9. Linux,Centos系统下配置java Jdk(附下载地址)

    一.下载jdk 官网下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 需要登录Oracle ...

  10. ERROR .web.servlet.DispatcherServlet - Context initialization failed

    自己创建了一个SSM 项目,使用maven的tomcat7 运行报错 ERROR .web.servlet.DispatcherServlet - Context initialization fai ...