Educational Codeforces Round 65 (Rated for Div. 2)
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)的更多相关文章
- Educational Codeforces Round 65 (Rated for Div. 2)题解
Educational Codeforces Round 65 (Rated for Div. 2)题解 题目链接 A. Telephone Number 水题,代码如下: Code #include ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- [ 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 ...
- Educational Codeforces Round 65 (Rated for Div. 2) E. Range Deleting(思维+coding)
传送门 参考资料: [1]:https://blog.csdn.net/weixin_43262291/article/details/90271693 题意: 给你一个包含 n 个数的序列 a,并且 ...
- 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 ...
随机推荐
- beyond compare秘钥被禁
错误提示:This license key has been revoked xxxxx 即: Windows 系统: 解决方法: 删除以下目录中的所有文件即可. C:\Users\Administr ...
- SpringBoot + Vue前后端分离图片上传到本地并前端访问图片
同理应该可用于其他文件 图片上传 application.yml 配置相关常量 prop: upload-folder: E:/test/ # 配置SpringMVC文件上传限制,默认1M.注意MB要 ...
- Elasticsearch6.4.0-windows环境部署安装
Elasticsearch可以轻松的实现全文检索,本文主要介绍Elasticsearch(ES)环境的安装部署,该文及后续使用的ES版本为6.4.0.希望能够帮助到大家. 一.安装Elasticsea ...
- Mininet系列实验(四):基于Mininet测量路径的损耗率
1 实验目的 熟悉Mininet自定义拓扑脚本的编写与损耗率的设定: 熟悉编写POX脚本,测量路径损耗速率 2 实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外 ...
- app 爬虫
https://mp.weixin.qq.com/s/ClYYfpvylQGlYYHDFBuKpA 唯品会舆情监控系统 姚彬炎 唯技术 2月26日
- 用户登录之asp.net cookie的写入、读取与操作
页面前面: <div id="login" runat="server"> <span class="log_title" ...
- Angular 中的 dom 操作(ViewChild)以及父子组件中通过 ViewChild 调用子组件的方法
<app-header #header></app-header> <div #myBox> 我是一个dom节点 </div> <button ( ...
- flutter showDatePicker显示中文日期_Flutter时间控件显示中文
flutter showDatePicker showTimePicker显示中文日期 1.配置flutter_localizations依赖 找到pubspec.yaml配置flutter_loca ...
- 一百四十七:CMS系统之celery实现邮件和短信异步发送
celery工作原理 celery官方文档:https://docs.celeryproject.org/en/latest/ 安装:pip install celery windows下还需安装ev ...
- SpringCloud学习成长 四 断路器(Hystrix)
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...