突如其来的div3,赛后打了一下。

A - Floor Number

数学题答案是1+⌈n−2x⌉1+\lceil \frac{n-2}{x} \rceil1+⌈xn−2​⌉

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{IO;int T=1;cin>>T;while(T--){int n,x;cin>>n>>x;if(n<=2) cout<<1<<'\n';elsecout<<1+(n-2+x-1)/x<<'\n';}return 0;
}

B - Symmetric Matrix

只要存在2×2小矩形是对称的并且边长是偶数就一定能够拼成大矩形,否则不行。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{IO;int T=1;cin>>T;while(T--){bool ok=0;int n,m;cin>>n>>m;while(n--){int a,b,c,d;cin>>a>>b>>c>>d;if(b==c) ok=1;}if(m%2) ok=0;if(ok) cout<<"YES\n";else cout<<"NO\n";}return 0;
}

C - Increase and Copy

稍微转化一下,很明显如果加1,只需要每次把a1a_1a1​,并且操作相同次数,先加1再复制结果一定更优。
此题有一个样例提示了我:当n=1000000000n=1000000000n=1000000000,答案是632446324463244,说明移动步数非常少。由此我们可以枚举+1的操作数然后就不难解决了。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
const int N=300010;
int main()
{IO;int T=1;cin>>T;while(T--){int n;cin>>n;int res=0x3f3f3f3f;for(int i=0;i<=70000;i++){int now=1;now+=i;if(now>=n){res=min(res,i);break;}elseres=min(res,i+(n-now+now-1)/now);}cout<<res<<'\n';}return 0;
}

E - Rock, Paper, Scissors

不难发现只需要找到互不相交,子串和为0的数量。
考虑前缀和数组sis_isi​,如果si=sjs_i=s_jsi​=sj​,说明ai+1+ai+2+⋯+aj=0a_{i+1}+a_{i+2}+\dots+a_j=0ai+1​+ai+2​+⋯+aj​=0
然后用个map记录一下即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=200010;
ll a[N],s[N];
int n;
map<ll,int> mp;
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n;mp.clear();for(int i=1;i<=n;i++){cin>>a[i];s[i]=s[i-1]+a[i];}int now=0;int res=0;mp[0]=0;for(int i=1;i<=n;i++){if(mp.count(s[i])){if(now-1<=mp[s[i]]){res++;now=i;}}mp[s[i]]=i;}cout<<res<<'\n';}return 0;
}

D - Non-zero Segments

别问,问就是暴力
出牌顺序就6种,消顺序就8种,直接枚举即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int a,b,c;
int e,f,g;
int main()
{IO;int T=1;//cin>>T;while(T--){cin>>n;cin>>a>>b>>c;cin>>e>>f>>g;int cnt0=0;for(int i=0;i<1<<3;i++){int x=e,y=f,z=g;int now1=min(a,x+z);if(i&1) {z-=x-max(0,x-now1);x=max(0,x-now1);}else{x-=z-max(0,z-now1);z=max(0,z-now1);}int now2=min(b,y+x);if(i>>1&1){x-=y-max(0,y-now2);y=max(0,y-now2);}else{y-=x-max(0,x-now2);x=max(0,x-now2);}int now3=min(c,y+z);if(i>>2&1){z-=y-max(0,y-now3);y=max(0,y-now3);}else{y-=z-max(0,z-now3);z=max(0,z-now3);}cnt0=max(cnt0,now1+now2+now3);}for(int i=0;i<1<<3;i++){int x=e,y=f,z=g;int now1=min(a,x+z);int now2=min(b,y+x);if(i>>1&1){x-=y-max(0,y-now2);y=max(0,y-now2);}else{y-=x-max(0,x-now2);x=max(0,x-now2);}if(i&1) {z-=x-max(0,x-now1);x=max(0,x-now1);}else{x-=z-max(0,z-now1);z=max(0,z-now1);}int now3=min(c,y+z);if(i>>2&1){z-=y-max(0,y-now3);y=max(0,y-now3);}else{y-=z-max(0,z-now3);z=max(0,z-now3);}cnt0=max(cnt0,now1+now2+now3);}for(int i=0;i<1<<3;i++){int x=e,y=f,z=g;int now2=min(b,y+x);if(i>>1&1){x-=y-max(0,y-now2);y=max(0,y-now2);}else{y-=x-max(0,x-now2);x=max(0,x-now2);}int now3=min(c,y+z);if(i>>2&1){z-=y-max(0,y-now3);y=max(0,y-now3);}else{y-=z-max(0,z-now3);z=max(0,z-now3);}int now1=min(a,x+z);if(i&1) {z-=x-max(0,x-now1);x=max(0,x-now1);}else{x-=z-max(0,z-now1);z=max(0,z-now1);}cnt0=max(cnt0,now1+now2+now3);}for(int i=0;i<1<<3;i++){int x=e,y=f,z=g;int now1=min(a,x+z);if(i&1) {z-=x-max(0,x-now1);x=max(0,x-now1);}else{x-=z-max(0,z-now1);z=max(0,z-now1);}int now3=min(c,y+z);if(i>>2&1){z-=y-max(0,y-now3);y=max(0,y-now3);}else{y-=z-max(0,z-now3);z=max(0,z-now3);}int now2=min(b,y+x);if(i>>1&1){x-=y-max(0,y-now2);y=max(0,y-now2);}else{y-=x-max(0,x-now2);x=max(0,x-now2);}cnt0=max(cnt0,now1+now2+now3);}for(int i=0;i<1<<3;i++){int x=e,y=f,z=g;int now1=min(a,x+z);int now3=min(c,y+z);if(i>>2&1){z-=y-max(0,y-now3);y=max(0,y-now3);}else{y-=z-max(0,z-now3);z=max(0,z-now3);}if(i&1) {z-=x-max(0,x-now1);x=max(0,x-now1);}else{x-=z-max(0,z-now1);z=max(0,z-now1);}int now2=min(b,y+x);if(i>>1&1){x-=y-max(0,y-now2);y=max(0,y-now2);}else{y-=x-max(0,x-now2);x=max(0,x-now2);}cnt0=max(cnt0,now1+now2+now3);}for(int i=0;i<1<<3;i++){int x=e,y=f,z=g;int now3=min(c,y+z);if(i>>2&1){z-=y-max(0,y-now3);y=max(0,y-now3);}else{y-=z-max(0,z-now3);z=max(0,z-now3);}int now2=min(b,y+x);if(i>>1&1){x-=y-max(0,y-now2);y=max(0,y-now2);}else{y-=x-max(0,x-now2);x=max(0,x-now2);}int now1=min(a,x+z);if(i&1) {z-=x-max(0,x-now1);x=max(0,x-now1);}else{x-=z-max(0,z-now1);z=max(0,z-now1);}cnt0=max(cnt0,now1+now2+now3);}int cnt1=min(n,min(a,f)+min(b,g)+min(c,e));cout<<n-cnt0<<' '<<cnt1<<'\n';}return 0;
}

F - Number of Subsequences

首先不考虑问号,我们求子序列abc的个数可以用动态规划设计状态
状态表示:
f(i,0)f_{(i,0)}f(i,0)​表示考虑前iii个字符,子序列aaa的数目
f(i,1)f_{(i,1)}f(i,1)​表示考虑前iii个字符,子序列ababab的数目
f(i,2)f_{(i,2)}f(i,2)​表示考虑前iii个字符,子序列abcabcabc的数目
状态转移:
如果当前字符是aaa,那么f(i,0)=f(i−1,0)+1f_{(i,0)}=f_{(i-1,0)}+1f(i,0)​=f(i−1,0)​+1
如果当前字符是bbb,那么f(i,1)=f(i−1,1)+f(i,0)f_{(i,1)}=f_{(i-1,1)}+f_{(i,0)}f(i,1)​=f(i−1,1)​+f(i,0)​
如果当前字符是ccc,那么f(i,2)=f(i−1,2)+f(i,1)f_{(i,2)}=f_{(i-1,2)}+f_{(i,1)}f(i,2)​=f(i−1,2)​+f(i,1)​

此题目非常dt的地方就是因为问号的3种情况,导致有些转移不是那么简单
一个问号的3种情况会使得原来的f(i,0/1/2)f_{(i,0/1/2)}f(i,0/1/2)​翻3倍,而对于f(i,0)f_{(i,0)}f(i,0)​的转移会使得+1+1+1变成+pk(k是之前出现?的数目)+p^k(k是之前出现?的数目)+pk(k是之前出现?的数目)

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=200010;
const ll mod=1e9+7;
char s[N];
ll f[N][3];
int main()
{IO;int T=1;//cin>>T;while(T--){int n;cin>>n;cin>>s+1;ll p=1;for(int i=1;i<=n;i++){if(s[i]=='?'){f[i][0]=(3ll*f[i-1][0]+p)%mod;f[i][1]=(3ll*f[i-1][1]+f[i-1][0])%mod;f[i][2]=(3ll*f[i-1][2]+f[i-1][1])%mod;p=p*3%mod;}else if(s[i]=='a') {f[i][0]=(f[i-1][0]+p)%mod;f[i][1]=f[i-1][1];f[i][2]=f[i-1][2];}else if(s[i]=='b'){f[i][0]=f[i-1][0];f[i][1]=(f[i-1][1]+f[i-1][0])%mod;f[i][2]=f[i-1][2];}else {f[i][0]=f[i-1][0];f[i][1]=f[i-1][1];  f[i][2]=(f[i-1][2]+f[i-1][1])%mod;}}cout<<f[n][2]<<'\n';}return 0;
}

要加油哦~

Codeforces Round #674 (Div. 3)相关推荐

  1. Codeforces Round #674 (Div. 3) F. Number of Subsequences 简单计数dp

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串,包含a,b,c,?a,b,c,?a,b,c,?四种字符,其中???可以变成为a,b,ca,b,ca,b,c的任意一种,让你求abca ...

  2. Codeforces Round #674 (Div. 3)A-F题解

    Codeforces Round #674 (Div. 3)A-F题解 比赛链接:https://codeforces.com/contest/1426 A题 水题不写题解 #include<b ...

  3. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  4. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  5. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  6. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  7. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  8. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  9. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

最新文章

  1. at指令 和c语言,学渣求指教,如何识别字符串中的AT命令并逐个输出,求程序!!!...
  2. api可以主动采集用户数据吗_模拟量数字量采集卡之EC-8001篇
  3. Opencv——霍夫变换以及遇到的一些问题
  4. oracle授权只读用户,Oracle创建只读用户(账号)的方法
  5. 国外经典!架构师必备:《MongoDB实战》第2版
  6. 计算机桌面上的声音图标没了怎么办,电脑桌面的音量图标不见了怎么办
  7. ubuntu安装词典goldendict
  8. 复制文件并重命名到新的文件夹
  9. 20 分钟教你量化自己的资产
  10. 淘宝API开发系列---阿里.聚石塔.开放平台的使用
  11. 第一章 【教育基础知识和基本原理】
  12. HCIP考试-华为证书安全方向已取得
  13. 画图软件Java实现(面向对象程序设计)
  14. Bluetooth Core Architecture Blocks----蓝牙核心架构
  15. Zookeeper序列化及通信协议
  16. 互联网快讯:极米NEW Z6X凭出众音画表现获好评;京东科技与天奇股份达成深度合作
  17. Failed to execute tools\android.bat:分分钟解决!网上千篇一律,解决不了?看看这篇!
  18. bzoj 3999: [TJOI2015]旅游(树链剖分)
  19. ubuntu 进入紧急救援模式
  20. 研究生常用的一些学术搜索引擎

热门文章

  1. 只能选择分卷文件的第一部分。_为机器学习模型选择正确的度量评估(第一部分)...
  2. linux中的ip地址范围,linux – ip地址范围参数
  3. php判断子字符串位置,PHP怎样查询子字符串位置
  4. action评测 osmo_前后双屏 大疆OSMO ACTION运动相机评测
  5. 算法设计与分析——递归与分治策略——线性时间选择
  6. 洛谷 P1596 [USACO10OCT]Lake Counting S-dfs
  7. SQL9 查找除复旦大学的用户信息(数据库否定语句写法)
  8. oracle导出BOM文件,ORACLE ERP导数据(BOM清单)-备份恢复-Oracle频道-中国IT实验室
  9. python机器学习、数据分析常用第三方库(实时更新)
  10. 数据结构---Kruskal最小生成树