A:签到。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
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,k;
signed main()
{
n=read(),k=read();
cout<<n-k+1;
return 0;
//NOTICE LONG LONG!!!!!
}

  B:签到。背包。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 3010
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 r,g,b,n;
ll f[N];
signed main()
{
r=read(),g=read(),b=read(),n=read();
f[0]=1;
for (int i=r;i<=n;i++) f[i]+=f[i-r];
for (int i=g;i<=n;i++) f[i]+=f[i-g];
for (int i=b;i<=n;i++) f[i]+=f[i-b];
cout<<f[n];
return 0;
//NOTICE LONG LONG!!!!!
}

  C:太难了吧。先统计一下内部的AB,然后只留下首尾两字符,显然只有BB、AA、BA是有用的。把BA全部接起来,相当于至多剩下一个BA,将其接在BB前或者AA后。AABB两两配对。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 10010
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,ans,f[N][2];
char s[N][12];
signed main()
{
n=read();
for (int i=1;i<=n;i++) scanf("%s",s[i]+1);
for (int i=1;i<=n;i++)
{
int m=strlen(s[i]+1);
for (int j=1;j<m;j++)
if (s[i][j]=='A'&&s[i][j+1]=='B') ans++;
if (s[i][1]=='A') f[i][0]=0;
else if (s[i][1]=='B') f[i][0]=1;
else f[i][0]=2;
if (s[i][m]=='A') f[i][1]=0;
else if (s[i][m]=='B') f[i][1]=1;
else f[i][1]=2;
}
int cnt0=0,cnt1=0,cnt10=0;
for (int i=1;i<=n;i++)
{
if (f[i][0]==1&&f[i][1]==0) cnt10++;
else if (f[i][1]==0) cnt0++;
else if (f[i][0]==1) cnt1++;
}
if (cnt10) ans+=cnt10-1,cnt10=1;
if (cnt0&&cnt10) ans++,cnt10=0;
ans+=min(cnt0+cnt10,cnt1);
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  D:设n=km+x(0<x<m)。则[n/m]=n%m即k=n-km k(m+1)=n 枚举n的因子即可,注意判断0<x<m。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
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;
}
ll n,ans;
signed main()
{
cin>>n;
for (ll i=1;i*i<=n;i++)
if (n%i==0)
{
if ((i-1)*(n/i+1)>n) ans+=i-1;
if (i*i!=n) if ((n/i-1)*(i+1)>n) ans+=n/i-1;
}
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  E:做一个异或前缀和,则要选一个x、0交替序列。如果序列异或和不为0,则x只能取该值。否则枚举x。都是要用O(x个数)的复杂度统计序列个数。找出所有x的位置,前缀和求出之间0的个数,然后做一个dp即可,即f[i][0/1]为到第i个位置时最后一个取的是01的方案数,注意一下细节即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 2000010
#define P 1000000007
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],id[N],nxt[N],p[N],b[N],f[N][2],m,ans;
int ksm(int a,int k)
{
int s=1;
for (;k;k>>=1,a=1ll*a*a%P) if (k&1) s=1ll*s*a%P;
return s;
}
void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
int solve(int x)
{
if (p[x]<=n)
{
id[m=1]=p[x];
while (nxt[id[m]]<=n) id[m+1]=nxt[id[m]],m++;
}
else return 0;
int t=0;
for (int i=1;i<=m;i++)
{
b[++t]=-1;
if (i<m) b[++t]=s[id[i+1]]-s[id[i]];
}
f[0][0]=1;
for (int i=1;i<=t;i++)
{
f[i][0]=f[i][1]=0;
if (b[i]==-1)
{
f[i][0]=f[i-1][0];
f[i][1]=(f[i-1][1]+f[i-1][0])%P;
}
else
{
f[i][1]=f[i-1][1];
f[i][0]=(f[i-1][0]+1ll*f[i-1][1]*b[i])%P;
}
}
return f[t][1];
}
int solve2(int x)
{
if (p[x]<=n)
{
id[m=1]=p[x];
while (nxt[id[m]]<n) id[m+1]=nxt[id[m]],m++;
}
else return 0;
int t=0;id[m+1]=n;
for (int i=1;i<=m;i++)
{
b[++t]=-1;
b[++t]=s[id[i+1]]-s[id[i]];
}
f[0][0]=1;
for (int i=1;i<=t;i++)
{
f[i][0]=f[i][1]=0;
if (b[i]==-1)
{
f[i][0]=f[i-1][0];
f[i][1]=(f[i-1][1]+f[i-1][0])%P;
}
else
{
f[i][1]=f[i-1][1];
f[i][0]=(f[i-1][0]+1ll*f[i-1][1]*b[i])%P;
}
}
return f[t][0];
}
signed main()
{
n=read();
for (int i=1;i<=n;i++) a[i]=a[i-1]^read();
for (int i=1;i<=n;i++)
{
s[i]=s[i-1];
if (a[i]==0) s[i]++;
}
for (int i=0;i<(1<<20);i++) p[i]=n+1;
for (int i=n;i>=1;i--)
{
nxt[i]=p[a[i]];
p[a[i]]=i;
}
if (a[n]==0)
{
ans=ksm(2,s[n]-1);
for (int i=1;i<(1<<20);i++) inc(ans,solve(i));
}
else ans=solve2(a[n]);
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  result:rank 76

diverta 2019 Programming Contest的更多相关文章

  1. AtCoder diverta 2019 Programming Contest 2

    AtCoder diverta 2019 Programming Contest 2 看起来我也不知道是一个啥比赛. 然后就写写题解QWQ. A - Ball Distribution 有\(n\)个 ...

  2. 【AtCoder】diverta 2019 Programming Contest 2

    diverta 2019 Programming Contest 2 A - Ball Distribution 特判一下一个人的,否则是\(N - (K - 1) - 1\) #include &l ...

  3. 【AtCoder】diverta 2019 Programming Contest

    diverta 2019 Programming Contest 因为评测机的缘故--它unrated了.. A - Consecutive Integers #include <bits/st ...

  4. diverta 2019 Programming Contest 2

    A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 ...

  5. diverta 2019 Programming Contest 2自闭记

    A 签到(a-b problem不用贴了吧,以后atcoder小于300分题均不贴代码) B 发现选择的p,q一定是其中两点间的距离,于是可以O(n2)枚举两点,再O(n2)判断,其实可以做到O(n3 ...

  6. [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

    [AtCoder] NIKKEI Programming Contest 2019   本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...

  7. [AtCoder] Yahoo Programming Contest 2019

    [AtCoder] Yahoo Programming Contest 2019   很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...

  8. 模拟赛小结:2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

    比赛链接:传送门 本场我们队过的题感觉算法都挺简单的,不知道为啥做的时候感觉没有很顺利. 封榜后7题,罚时1015.第一次模拟赛金,虽然是北欧的区域赛,但还是有点开心的. Problem B Best ...

  9. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

随机推荐

  1. ubuntu video and audio

    推荐你直接安装ubuntu-studio系统.里面有默认安装了很多多媒体软件,主要集中在4个方面1.音频编辑:Jack, Ardour, Audacity, Qtractor. Hydrogen, Y ...

  2. createElement与createDocumentFragment的一些小区别

    在DOM操作里,createElement是创建一个新的节点,createDocumentFragment是创建一个文档片段. 网上可以搜到的大部分都是说使用createDocumentFragmen ...

  3. 阶段5 3.微服务项目【学成在线】_day18 用户授权_16-细粒度授权-我的课程细粒度授权-测试

    重启课程管理服务 刷新页面,令牌到期需要先登陆 首先拿到company的id 测试2号公司

  4. 关于mysql索引---联合索引

    结论: mysql联合索引,联合索引以哪个字段开始很重要. 如果  联合索引字段为  1,2,3,4 那么如果查询条件为  6,7,8,1 这样也会走上面的联合索引 但是如果查询条件不是从1开始那么则 ...

  5. JavaScript正则表达式补充

    定义正则表达式 /.../用于定义正则表达式 /.../g表示全局匹配 /.../i表示不区分大小写 /.../m表示多行匹配 JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m ...

  6. Python基础之set集合与函数

    set集合 集合是一个无序且不重复的元素组合,以大括号表示.使用详情: >>> b=set(a) >>> type(b) <class 'set'> & ...

  7. (十一)使用Jconsole监控线程

    一.案例 监控线程情况,包括阻塞.死循环等 1.1 代码如下,下述代码共有三个线程,Main.mythread01.mythread02线程,其中mythread01线程为死循环.mythread02 ...

  8. SpringCloud入门01之基础知识

    一.Spring Cloud 什么是spring cloud, 为什么要使用微服务架构? 参考度娘 Spring Cloud是一系列框架的有序集合, 它利用Spring Boot的开发便利性巧妙地简化 ...

  9. Introduction - What is machine learning

    摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第一章<绪论:初识机器学习>中第2课时<什么是机器学习?>的视频原文字幕.为本人在视频学习过程中逐 ...

  10. 纯小白安装MongoDB的图形界面工具adminMongo

    今天安了两个MongoDB的图形界面工具,robot3和adminMongo,至于为什么安两个....因为网上说啥好用的都有,我也很迷... 安装adminMongo的时候...和正常软件安装流程不太 ...