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. train loss和test loss

    train loss 不断下降,test loss不断下降,说明网络仍在学习;(最好的)train loss 不断下降,test loss趋于不变,说明网络过拟合;(max pool或者正则化)tra ...

  2. 安卓APP在线升级

    安卓APP在线升级 通过IDHTTP组件在线下载APP到手机中,然后自动安装这个APP程序. 1)在线下载APP程序 需引用单元: {$IFDEF ANDROID} FMX.Helpers.Andro ...

  3. 常用的xml头文件

    原文:https://www.cnblogs.com/uniquezhangqi/p/9199329.html#commentform xmlns,xmlns:xsi,xsi:schemaLocati ...

  4. Mat转CImage

    uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址 ps=img.ptr<uchar>(i); void MatToCImage( Mat ...

  5. pve_ceph问题汇总

    在同一个网络内,建立了两个同名的群集 Jun 24 11:56:08 cu-pve05 kyc_zabbix_ceph[2419970]: ]} Jun 24 11:56:08 cu-pve05 co ...

  6. setShadpwLayer实现阴影效果

    package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.*; imp ...

  7. 机器学习 - 算法 - SVM 支持向量机

    SVM 原理引入 支持向量机( SVM,Support Vector Machine ) 背景 2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要 ...

  8. HTML5 地理位置定位API(1)

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...

  9. 关于采样率&位深&码率&无损的一些心得

    转载自:https://blog.csdn.net/Marenow/article/details/85253283 记笔记,记下来自己的一些关于音频基础知识的总结. 采样率外界的声音都是模拟信号,在 ...

  10. 【Leetcode_easy】720. Longest Word in Dictionary

    problem 720. Longest Word in Dictionary 题意: solution1: BFS; class Solution { public: string longestW ...