Solution Set -「ABC 196」
「ABC 196A」Difference Max
Link.
略。
#include<cstdio>
long long a,b,c,d;
int main(){
scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
printf("%lld\n",b-c);
return 0;
}
「ABC 196B」Round Down
Link.
略。
#include<cstdio>
#include<cstring>
char s[10000];
int main(){
scanf("%s",s);int len=strlen(s);
for(int i=0;i<len;++i)if(s[i]^'.')putchar(s[i]);else break;
return 0;
}
「ABC 196C」Doubled
Link.
分类讨论即可,可能会有点点细节需要注意。
#include<cstdio>
#include<algorithm>
using namespace std;
long long n;
int dig[20],cnt;
long long qpow(long long bas,long long fur){long long res=0;for(long long i=1;i<=fur;++i)res=res*10+9;return res;}
long long getnum(int l,int r){long long res=0;for(int i=r;i>=l;--i)res=res*10+dig[i];return res;}
int main(){
scanf("%lld",&n);long long bk=n;do dig[++cnt]=bk%10,bk/=10; while(bk);
if(cnt==1)return puts("0"),0;int lm=(cnt>>1);
long long pre=getnum(cnt-lm+1,cnt),suf=getnum(1,lm);
if(cnt&1)printf("%lld\n",qpow(9,lm));
else{
if(pre<=suf)printf("%lld\n",pre);
else printf("%lld\n",pre-1);
}
return 0;
}
/*
23333
3 3 3 3 2
232
*/
「ABC 196D」Hanjo
Link.
暴搜。
#include<iostream>
using namespace std;
int h,w,a,b,ans;
void dfs(int solvedNumber,int stateBoard,int leftLongerBlock,int leftCenterBlock)
{
if(solvedNumber==h*w) ++ans;
else
{
if(stateBoard&(1<<solvedNumber)) return dfs(solvedNumber+1,stateBoard,leftLongerBlock,leftCenterBlock);
if(leftLongerBlock)
{
if((solvedNumber%w!=w-1)&&(!(stateBoard&(1<<(solvedNumber+1))))) dfs(solvedNumber+1,stateBoard|(1<<solvedNumber)|(1<<(solvedNumber+1)),leftLongerBlock-1,leftCenterBlock);
if(solvedNumber+w<h*w) dfs(solvedNumber+1,stateBoard|(1<<solvedNumber)|(1<<(solvedNumber+w)),leftLongerBlock-1,leftCenterBlock);
}
if(leftCenterBlock) dfs(solvedNumber+1,stateBoard|(1<<solvedNumber),leftLongerBlock,leftCenterBlock-1);
}
}
int main()
{
cin >> h >> w >> a >> b;
dfs(0,0,a,b); cout << ans << "\n";
return 0;
}
「ABC 196E」Filters
Link.
这是个 Segment Tree Beats 的板子,不打了。
// Oops, something went wrong.
「ABC 196F」Substring 2
Link.
你 ABC 考 FFT 字符串匹配。
定义匹配函数 \(f(x)=\sum_{i=0}^{|T|-1}(S_{x+i}-T_{i})^{2}=\sum_{i=0}^{|T|-1}S^{2}_{x+i}-2\sum_{i=0}^{|T|-1}S_{x+i}T_{i}+\sum_{i=0}^{|T|-1}T_{i}^{2}\)。
然后反转 \(T\) 卷积即可。
#include<cstdio>
#include<numeric>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MOD=998244353,INF=numeric_limits<int>::max();
void exGCD(int one,int ano,int &x,int &y)
{
if(ano==0) x=1,y=0;
else exGCD(ano,one%ano,y,x),y-=(one/ano)*x;
}
int getInv(int val){int res,w; exGCD(val,MOD,res,w); return (res+MOD)%MOD;}
int qpow(int bas,int fur)
{
int res=1;
while(fur)
{
if(fur&1) res=LL(res)*bas%MOD;
bas=LL(bas)*bas%MOD;
fur>>=1;
}
return res%MOD;
}
namespace Poly
{
typedef vector<int> poly;
#define len(x) (int((x).size()))
int lim,rev[4000010];
void ntt(poly &f,int op)
{
for(int i=0;i<lim;++i) if(i<rev[i]) swap(f[i],f[rev[i]]);
for(int len=2;len<=lim;len<<=1)
{
int bas=qpow(op==1?3:332748118,(MOD-1)/len);
for(int fr=0;fr<lim;fr+=len)
{
int now=1;
for(int ba=fr;ba<fr+(len>>1);++ba,now=LL(now)*bas%MOD)
{
int tmp=LL(now)*f[ba+(len>>1)]%MOD;
f[ba+(len>>1)]=(f[ba]-tmp+MOD)%MOD;
f[ba]=(f[ba]+tmp)%MOD;
}
}
}
if(op==-1)
{
int tmp=getInv(lim);
for(int i=0;i<lim;++i) f[i]=LL(f[i])*tmp%MOD;
}
}
poly operator*(poly f,poly g)
{
int n=len(f)+len(g)-1; lim=1;
while(lim<n) lim<<=1;
f.resize(lim),g.resize(lim);
for(int i=0;i<lim;++i) rev[i]=(rev[i>>1]>>1)|((i&1)?(lim>>1):0);
ntt(f,1),ntt(g,1);
for(int i=0;i<lim;++i) f[i]=LL(f[i])*g[i]%MOD;
ntt(f,-1),f.resize(n);
return f;
}
poly operator*(int x,poly f){for(int i=0;i<len(f);++i) f[i]=LL(f[i])*x%MOD; return f;}
poly operator-(poly f,poly g)
{
int n=max(len(f),len(g));
f.resize(n),g.resize(n);
for(int i=0;i<len(f);++i) f[i]=(f[i]-g[i]+MOD)%MOD;
return f;
}
poly operator+(poly f,poly g)
{
int n=max(len(f),len(g));
f.resize(n),g.resize(n);
for(int i=0;i<len(f);++i) f[i]=(f[i]+g[i])%MOD;
return f;
}
}using namespace Poly;
int main()
{
string S,T;
cin >> S >> T; reverse(T.begin(),T.end());
poly onesi,anosi,onexsi,anoxsi;
#define Sqr(x) ((LL)(x)*(x)%MOD)
onesi.push_back(Sqr((*S.begin())-'0'));
anosi.push_back(Sqr((*T.begin())-'0'));
for(int i=1;i<len(S);++i) onesi.push_back(onesi.back()+Sqr(S[i]-'0'));
for(int i=1;i<len(T);++i) anosi.push_back(anosi.back()+Sqr(T[i]-'0'));
for(char c : S) onexsi.push_back(c-'0'); for(char c : T) anoxsi.push_back(c-'0');
poly tmp=2*onexsi*anoxsi; int ans=INF;
#define getValue(i) (((i)<(len(T)))?0:onesi[(i)-len(T)])
for(unsigned int i=T.size()-1;i<S.size();++i) ans=min(ans,onesi[i]-getValue(i)+anosi[len(T)-1]-tmp[i]);
printf("%d\n",ans);
return 0;
}
Solution Set -「ABC 196」的更多相关文章
- Solution Set -「ABC 217」
大家好屑兔子又来啦! [A - Lexicographic Order] 说个笑话,\(\color{black}{\text{W}}\color{red}{\text{alkingDead} ...
- Diary / Solution Set -「WC 2022」线上冬眠做噩梦
大概只有比较有意思又不过分超出能力范围的题叭. 可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics 任意一个 ...
- Solution Set -「ARC 107」
「ARC 107A」Simple Math Link. 答案为: \[\frac{a(a+1)\cdot b(b+1)\cdot c(c+1)}{8} \] 「ARC 107B」Quadrup ...
- Solution -「ABC 219H」Candles
\(\mathcal{Description}\) Link. 有 \(n\) 支蜡烛,第 \(i\) 支的坐标为 \(x_i\),初始长度为 \(a_i\),每单位时间燃烧变短 \(1\) ...
- Solution -「ABC 215H」Cabbage Master
\(\mathcal{Description}\) Link. 有 \(n\) 种颜色的,第 \(i\) 种有 \(a_i\) 个,任意两球互不相同.还有 \(m\) 个盒子,每个盒子可以被放 ...
- Solution -「ABC 213G」Connectivity 2
\(\mathcal{Description}\) Link. 给定简单无向图 \(G=(V,E)\),点的编号从 \(1\) 到 \(|V|=n\).对于 \(k=2..n\),求 \(H= ...
- Solution -「ABC 213H」Stroll
\(\mathcal{Description}\) Link. 给定一个含 \(n\) 个结点 \(m\) 条边的简单无向图,每条边的边权是一个常数项为 \(0\) 的 \(T\) 次多项式, ...
- Solution -「ABC 217」题解
D - Cutting Woods 记录每一个切割点,每次求前驱后驱就好了,注意简单判断一下开闭区间. 考场上采用的 FHQ_Treap 无脑莽. #include <cstdio> #i ...
- 「ABC 249Ex」Dye Color
考虑停时定理. 初始势能为 \(\sum \Phi(cnt_i)\),末势能为 \(\Phi(n)\),我们希望构造这样一个 \(\Phi:Z\to Z\) 函数,使得每一次操作期望势能变化量为常数. ...
- Note -「Lagrange 插值」学习笔记
目录 问题引入 思考 Lagrange 插值法 插值过程 代码实现 实际应用 「洛谷 P4781」「模板」拉格朗日插值 「洛谷 P4463」calc 题意简述 数据规模 Solution Step 1 ...
随机推荐
- Android Studio 引入kotlin 协程
首先保证创建了kotlin项目,然后,两个步骤: 1. 加入dependency,在 build.gradle(:app)中,加入 implementation 'org.jetbrains.kotl ...
- 【城南 · LlamaIndex 教程】一文看懂LlamaIndex用法,为LLMs学习私有知识
我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」(全网平台同名)~ 担任某大厂的算法工程师,带来最新的前沿AI知识,分享 AI 有趣工具和实用玩法,包括 ChatGPT.AI绘图等,欢迎大家交流~ ...
- 使用Docker将Vite Vue项目部署到Nginx二级目录
Vue项目配置 使用Vite创建一个Vue项目,点我查看如何创建 配置打包路径 在Nginx中如果是二级目录,例如/web时,需要设置线上的打包路径 在项目跟路径下创建两个文件:.env.produc ...
- SQL Sever 各版本的适用环境
很多用visual studio做开发的朋友经常会用到sqlserver数据库,但是往往在选择的时候就不知道该使用哪个版本了,今天就给大家分享一下sqlserver各个版本之间的区别,以及各个版本之间 ...
- 1、笔记本刷ubuntu,安装饥荒服务器
目录 笔记本刷ubuntu,安装饥荒服务器 一.准备 二.笔记本刷机 1.制作Ubuntu server U盘启动盘 2.刷机 3.设置电源不休眠 三.安装饥荒服务器 四.最后说下网络 笔记本刷ubu ...
- Unity的IActiveBuildTargetChanged:深入解析与实用案例
Unity IActiveBuildTargetChanged Unity IActiveBuildTargetChanged是Unity引擎中的一个非常有用的功能,它可以让开发者在切换构建平台时自定 ...
- 即构SDK12月迭代:新增多项质量回调,互动白板、云录制SDK同步更新
即构SDK12月迭代来啦,本月LiveRoom/AudioRoom SDK新增了端到端延迟质量回调.房间会话ID信息,便于在音视频通话.直播场景中进行时延.通话质量的评测.同时还优化了硬件设备权限变更 ...
- C语言链表实现(郝斌数链表学习笔记)
#include "stdafx.h" #include<stdio.h> #include<stdlib.h> typedef struct Node { ...
- locust与jmeter测试过程及结果对比
JMeter和Locust都是强大的性能测试工具,各自拥有自己的优势和专注领域.JMeter提供了全面的功能和基于GUI的界面,适用于复杂的场景和非技术人员.相比之下,Locust采用了以代码为中心的 ...
- 自用 .net C# CSV文件写入读取工具类
using System.Data; using System.IO; using System.Linq; using System.Text; using System.Text.RegularE ...