A:签到。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 110
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 T,n;
char s[N];
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
T=read();
while (T--)
{
n=read();
scanf("%s",s+1);
int first=n;
for (int i=1;i<=n;i++) if (s[i]=='8') {first=i;break;}
if (n-first+1>=11) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
//NOTICE LONG LONG!!!!!
}

  B:太难了吧。注意到任意两数乘积不同。于是考虑问出12乘积、34乘积,由此已经可知56乘积。然后需要确定每一对的顺序,可以询问13得到13的值,再询问15得到5的值。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 110
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 w[7]={0,4,8,15,16,23,42},a[7];
bool isac(int x)
{
for (int i=1;i<=6;i++) if (w[i]==x) return 1;
return 0;
}
signed main()
{
int x,y,z;
cout<<"?"<<' '<<1<<' '<<2<<endl;x=read();
cout<<"?"<<' '<<3<<' '<<4<<endl;y=read();
cout<<"?"<<' '<<1<<' '<<3<<endl;z=read();
cout<<"?"<<' '<<1<<' '<<5<<endl;int t=read();
for (int i=1;i<=6;i++)
{
if (x%w[i]==0&&z%w[i]==0&&t%w[i]==0&&isac(x/w[i])&&isac(z/w[i])&&isac(t/w[i]))
{
a[1]=w[i];
a[2]=x/w[i];
a[3]=z/w[i];
a[5]=t/w[i];
}
}
a[4]=y/a[3];
a[6]=1;for (int i=1;i<=6;i++) a[6]*=w[i];
for (int i=1;i<=5;i++) a[6]/=a[i];
cout<<"!"<<' ';for (int i=1;i<=6;i++) cout<<a[i]<<' ';
return 0;
//NOTICE LONG LONG!!!!!
}

  C:并查集。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 500010
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,a[N],fa[N],size[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
signed main()
{
n=read(),m=read();
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=m;i++)
{
int t=read();
for (int j=1;j<=t;j++)
{
a[j]=read();
}
for (int j=1;j<t;j++)
fa[find(a[j])]=find(a[j+1]);
}
for (int i=1;i<=n;i++) size[find(i)]++;
for (int i=1;i<=n;i++) printf("%d ",size[find(i)]);
return 0;
//NOTICE LONG LONG!!!!!
}

  D:贪心。左括号分给当前前缀和小的,右括号分给当前前缀和大的。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#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,x,y,a[N];
char s[N];
bool flag[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]=-1;
for (int i=1;i<=n;i++)
if (a[i]==1)
{
if (x<y) x++,flag[i]=0;
else y++,flag[i]=1;
}
else
{
if (x>y) x--,flag[i]=0;
else y--,flag[i]=1;
}
for (int i=1;i<=n;i++) printf("%d",flag[i]);
return 0;
//NOTICE LONG LONG!!!!!
}

  E:对于确定的右端点r,显然合法的l是一段前缀。考虑先求出令保留[1,l]合法的最大l和令保留[r,m]合法的最小r,然后在范围内twopointers,记一下小于l的值的最晚出现位置和大于r的值的最早出现位置即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define N 1000010
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,a[N],mx[N];
vector<int> pos[N];
set<int> q;
ll ans;
signed main()
{
n=read(),m=read();
for (int i=1;i<=n;i++) a[i]=read();
for (int i=1;i<=n;i++) pos[a[i]].push_back(i);
int p=n+1;int l=m,r=1;
for (int i=m;i>=1;i--)
{
bool flag=0;
int x=n+1;
for (auto j:pos[i])
{
if (j>p) {flag=1;break;}
x=min(x,j);
}
p=min(p,x);
if (flag) {r=i;break;}
}
p=0;
for (int i=1;i<=m;i++)
{
bool flag=0;
int x=0;
for (auto j:pos[i])
{
if (j<p) {flag=1;break;}
x=max(x,j);
}
p=max(p,x);
if (flag) {l=i;break;}
}
int x=1;int y=0;
for (int i=r;i<=m;i++)
for (auto j:pos[i]) q.insert(j);
for (int i=1;i<=m;i++)
{
for (auto j:pos[i])
mx[i]=max(mx[i],j);
}
q.insert(n+1);
for (int i=r;i<=m;i++)
{
for (auto j:pos[i]) q.erase(j);
while (x<i&&x<l&&max(y,mx[x])<*q.begin()) y=max(y,mx[x++]);
ans+=x;
}
cout<<ans;
return 0;
//NOTICE LONG LONG!!!!!
}

  F:考虑每个数的贡献。区间内每有一个数比它小它的贡献次数就+1,初始贡献次数为1。于是考虑所有其他数对该数贡献次数的贡献。对于处于ax和ay的值,显然包含其的区间个数为x*(n-y+1)。于是要求出所有在其前方比它小的数的位置和与所有在其后方比它小的数的位置和。按权值从小到大考虑每个数,树状数组维护即可。wa了两发49简直自闭。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000010
#define int long long
#define N 500010
#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],b[N],p[N],tree2[N];
ll ans,s,tree[N];
void ins(int x){int k=x;while (k<=n) tree[k]+=x,k+=k&-k;}
int query(int k){ll s=0;while (k) s+=tree[k],k-=k&-k;return s%P;}
void ins2(int x){while (x<=n) tree2[x]++,x+=x&-x;}
int query2(int k){int s=0;while (k) s+=tree2[k],k-=k&-k;return s;}
signed main()
{
n=read();
for (int i=1;i<=n;i++) b[i]=a[i]=read();
sort(b+1,b+n+1);
for (int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+n+1,a[i])-b;
for (int i=1;i<=n;i++) p[a[i]]=i;
for (int i=1;i<=n;i++)
{
int x=b[i];
ans=(ans+1ll*x*(1ll*p[i]*(n-p[i]+1)%P+1ll*query(p[i])*(n-p[i]+1)%P+1ll*(1ll*(i-1-query2(p[i]))*(n+1)%P+P-(s+P-query(p[i]))%P)%P*p[i]%P)%P)%P;
ins(p[i]);ins2(p[i]);s+=p[i];
}
cout<<ans%P;
return 0;
//NOTICE LONG LONG!!!!!
}

  G:咕了咕了。

  小小小号。result:rank 18 rating +239

Educational Codeforces Round 65 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 65 (Rated for Div. 2)题解

    Educational Codeforces Round 65 (Rated for Div. 2)题解 题目链接 A. Telephone Number 水题,代码如下: Code #include ...

  2. Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS

    链接:https://codeforces.com/contest/1167/problem/D 题意: A string is called bracket sequence if it does ...

  3. Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution

    链接:https://codeforces.com/contest/1167/problem/C 题意: In some social network, there are nn users comm ...

  4. Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers

    链接:https://codeforces.com/contest/1167/problem/B 题意: This is an interactive problem. Remember to flu ...

  5. Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number

    链接:https://codeforces.com/contest/1167/problem/A 题意: A telephone number is a sequence of exactly 11  ...

  6. Educational Codeforces Round 65 (Rated for Div. 2)B. Lost Numbers(交互)

    This is an interactive problem. Remember to flush your output while communicating with the testing p ...

  7. [ Educational Codeforces Round 65 (Rated for Div. 2)][二分]

    https://codeforc.es/contest/1167/problem/E E. Range Deleting time limit per test 2 seconds memory li ...

  8. Educational Codeforces Round 65 (Rated for Div. 2) E. Range Deleting(思维+coding)

    传送门 参考资料: [1]:https://blog.csdn.net/weixin_43262291/article/details/90271693 题意: 给你一个包含 n 个数的序列 a,并且 ...

  9. Educational Codeforces Round 65 (Rated for Div. 2)(ACD)B是交互题,不怎么会

    A. Telephone Number A telephone number is a sequence of exactly 11 digits, where the first digit is  ...

随机推荐

  1. [RK3399] /bin/sh: 1: lz4c: not found

    CPU:RK3399 系统:Android 8.1 第一次在 RK3399 编译 Android 8.1 的系统,编译内核过程中报错如下: /bin/sh: : lz4c: not found mak ...

  2. EL表达式 与 JSTL标准标签库

    目录 EL表达式 什么是EL表达式 作用 EL内置11对象 EL执行表达式 JSTL 什么是JSTL JSTL标准标签库有5个子库 把JSTL标签库jar包引入工程当中 if标签 foreach标签 ...

  3. centos7.2下查看的java版本号

    1,centos7.2下查看的java版本号 java -version

  4. Tosca new project Repository as MS SQL Server

    # 然后对应的服务器就能自己给创建对应的数据库

  5. 如何配置 VirtualBox 中的客户机与宿主机之间的网络连接

    如何配置 VirtualBox 中的客户机与宿主机之间的网络连接 作者: Aaron Kili 译者: LCTT rusking | 2017-03-01 13:40   评论: 3 收藏: 3 当你 ...

  6. es6语法中的arrow function=>

    (x) => x + 相当于 function(x){ ; }; var ids = this.sels.map(item => item.id).join() var ids = thi ...

  7. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_04-用户认证-认证服务查询数据库-查询用户接口-接口开发

    定义dao 权限放在授权的课程里面做,现在先不管.我们还需要查企业信息,就是用户所属的公司 公司表 对应关系在xc_company 这是一个关系 表 这个表里有唯一索引 user_id 所以根据use ...

  8. logging日志管理

    日志:记录系统运行时的信息的(调试信息和异常信息) 基本用法: import logging logging.debug("这是一条调试信息") logging.info(&quo ...

  9. C#泛型学习

    什么是泛型 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样.将类型参数 ...

  10. Oracle客户端下载地址

    https://www.oracle.com/database/technologies/instant-client/downloads.html