C:即要使前一部分为白色后一部分为黑色,枚举分割点前缀和计算答案取min即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,a[N],s[N][2],ans=N;
char S[N];
signed main()
{
n=read();
scanf("%s",S+1);
for (int i=1;i<=n;i++) if (S[i]=='#') a[i]=1;else a[i]=0;
for (int i=1;i<=n;i++)
{
s[i][0]=s[i-1][0],s[i][1]=s[i-1][1];
if (a[i]==1) s[i][1]++;else s[i][0]++;
}
for (int i=0;i<=n;i++) ans=min(ans,s[i][1]+s[n][0]-s[i][0]);
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  D:即要求最大的一组和小于总和一半的方案数。容易想到设f[i][j]为前i个数最大一组(不是当前最大的一组,而是我们期望所有数分配完之后其成为最大的一组)和为j时的方案数。为保证第二维中的是最大的一组,做一个补集转化。dp时如果不将该数放进最大的一组就将方案数*2,因为剩下两组可以任选。最后有一个小问题就是如果总和是偶数,分成两组且每组恰好分得一半的方案数会被重复扣减,重新背包一下加回来即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 310
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,s,a[N],f[N*N],g[N*N];
signed main()
{
n=read();
for (int i=1;i<=n;i++) m+=a[i]=read();
s=(m-1)/2;
f[0]=1;
for (int i=1;i<=n;i++)
{
for (int j=m;j>=a[i];j--)
f[j]=(2ll*f[j]+f[j-a[i]])%P;
for (int j=a[i]-1;j>=0;j--) f[j]=2ll*f[j]%P;
}
int ans=1;for (int i=1;i<=n;i++) ans=3ll*ans%P;
for (int i=s+1;i<=m;i++) ans=(ans-3ll*f[i]%P+P)%P;
if (m%2==0)
{
g[0]=1;
for (int i=1;i<=n;i++)
{
for (int j=m;j>=a[i];j--)
g[j]=(g[j]+g[j-a[i]])%P;
}
ans=(ans+3ll*g[m/2]%P+P)%P;
}
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}
//2max(a,b,c)<a+b+c

  E、F:准备打猝死场,咕着先睡了。(woc闹钟没听见睡过了自闭了

  E:完全无法理解为啥枚举a0的每个质因子p暴力将x=0~p-1代入都会wa。

  F:小清新水题。首先枚举一下0的个数转化成只有1和2的情况。考虑找到第一个前缀和>x的位置i,这样区间[1,i]的和是x+1。容易发现此时1和i位置都必须是2,否则将区间缩小一点和就变为x。然后考虑第i+1位,可以发现也只能是2,否则区间[2,i+1]不合法。以此类推,[i,n]和[1,n-i+1]都必须是2。枚举i算算组合数即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 3010
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
int x=0,f=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n,m,C[N<<1][N<<1],ans;
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
signed main()
{
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
n=read(),m=read();
C[0][0]=1;
for (int i=1;i<=max(n,m);i++)
{
C[i][0]=1;
for (int j=1;j<=i;j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;
}
for (int i=0;i<=n;i++)
{
int s=0;
for (int j=0;j<=m-1-i;j++) inc(s,C[i][j]);
for (int j=1;j<=i;j++) //j是第一个前缀和>m的位置 j~i均为2 1~i-j+1均为2
if (j*2>m&&(i-j+1<j?(i-j+1)*2+(j-(i-j+1)+1):j*2)<=m+1)
if (i-j+1<j) inc(s,C[j-(i-j+1)-1][m+1-((i-j+1)*2+(j-(i-j+1)+1))]);
else if (j*2==m+1) inc(s,1);
inc(ans,1ll*s*C[n][n-i]%P);
}
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}
//先把0去掉 则要考虑求长度为0~n的满足条件的序列数量
//找到第一个前缀和>x的位置 然后若当前不是后缀 下一位必须是2 首位也必须是2
//即第一个前缀和>x的位置及之后全都是2

  result:rank 119 rating +42

Tenka1 Programmer Contest 2019的更多相关文章

  1. 【AtCoder】Tenka1 Programmer Contest 2019

    Tenka1 Programmer Contest 2019 C - Stones 题面大意:有一个01序列,改变一个位置上的值花费1,问变成没有0在1右边的序列花费最少多少 直接枚举前i个都变成0即 ...

  2. Atcoder Tenka1 Programmer Contest 2019

    C 签到题,f[i][0/1]表示以i结尾最后一个为白/黑的最小值,转移显然. #include<bits/stdc++.h> using namespace std; ; ]; char ...

  3. Atcoder Tenka1 Programmer Contest 2019 题解

    link 题面真简洁 qaq C Stones 最终一定是连续一段 . 加上连续一段 # .直接枚举断点记录前缀和统计即可. #include<bits/stdc++.h> #define ...

  4. Atcoder Tenka1 Programmer Contest 2019 E - Polynomial Divisors

    题意: 给出一个多项式,问有多少个质数\(p\)使得\(p\;|\;f(x)\),不管\(x\)取何值 思路: 首先所有系数的\(gcd\)的质因子都是可以的. 再考虑一个结论,如果在\(\bmod ...

  5. Atcoder Tenka1 Programmer Contest 2019 D Three Colors

    题意: 有\(n\)个石头,每个石头有权值,可以给它们染'R', 'G', 'B'三种颜色,如下定义一种染色方案为合法方案: 所有石头都染上了一种颜色 令\(R, G, B\)为染了'R', 染了'G ...

  6. Atcoder Tenka1 Programmer Contest 2019题解

    传送门 \(C\ Stones\) 最后肯定形如左边一段白+右边一段黑,枚举一下中间的断点,预处理一下前缀和就可以了 int main(){ // freopen("testdata.in& ...

  7. Tenka1 Programmer Contest 2019 D - Three Colors

    Three Colors 思路:dp 设sum为所有边的总和 不能组成三角形的情况:某条边长度>=ceil(sum/2),可以用dp求出这种情况的方案数,然后用总方案数减去就可以求出答案. 注意 ...

  8. Tenka1 Programmer Contest D - Crossing

    链接 Tenka1 Programmer Contest D - Crossing 给定\(n\),要求构造\(k\)个集合\({S_k}\),使得\(1\)到\(n\)中每个元素均在集合中出现两次, ...

  9. Tenka1 Programmer Contest C - Align

    链接 Tenka1 Programmer Contest C - Align 给定一个序列,要求重新排列最大化\(\sum_{i=2}^{i=n} |a_i-a_{i-1}|\),\(n\leq 10 ...

随机推荐

  1. centos通过yum安装mysql

    前言 前天按照Oracle上的文档装了一遍mysql,选了最新8.0的版本,后来出现一些问题,网上搜答案,出来的基本还是5.x版本的解决方案,并不适用8.0版本.然后我就去看了一下公司的正式环境买的阿 ...

  2. k8s集群监控(十一)--技术流ken

    Weave Scope   在我之前的docker监控中<Docker容器监控(十)--技术流ken>就已经提到了weave scope. Weave Scope 是 Docker 和 K ...

  3. AspNetCore 中使用 InentityServer4(2)

    基于上一篇文章 实现对IdnetityServer4 服务的使用 1:添加接口解决方案,并且使接口受认证服务的保护: 首先在解决方案中添加Api项目如下图所示: 在API项目中添加Nuget 引用 如 ...

  4. C# 连接/查询Jira

    查询jira数据,如果是前端,可以按照如下格式直接访问,获取数据 http://jira.company.com/rest/api/2/search?jql=project = REM AND res ...

  5. vue 模板template

    入门 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  6. web开发布局---传统布局篇

    1.传统布局 盒状模型结合 display 属性.float 浮动以及 position 定位属性设计的各式传统布局形式. 2.说再多不如动手实践,下面举三个例子 html 部分代码: <sec ...

  7. Android为TV端助力:intent传递消息

    我们都知道一个activity向另外一个activity传递消息可以用intent来传递 现在需求如下,一个不断接收消息服务的service,一个收到消息进行处理的activity service第一 ...

  8. vue input输入框长度限制

    今天在开发登录页时,需要设置登录输入框的长度,输入类型为number <input type="number" maxlength="11" placeh ...

  9. 业务与IT技术

    最近听一个同事又再次提问关于业务比技术重要,是真的吗? 今天我们再来看一下.      一,什么是业务? 业务意指某种有目的的工作或工作项目.技术可以指人类对机器.硬件或人造器皿的运用,但它也可以包含 ...

  10. Unity NPOI 无法读取xlsx

    遇到问题 在做编辑器开发时,需要在Unity Editor下直接读取Excel源文件,首先想到的是通过npoi去读取,但是遇到无法读取xlsx格式,只能读取xls格式的问题. 我的环境 unity 2 ...