Treasure Hunt

注意负数和0的特殊处理。。 水题。。 然而又被Hack了 吗的智障

#include<bits/stdc++.h>
using namespace std; int main()
{
int sa,sb,da,db,x,y;
scanf("%d%d%d%d%d%d",&sa,&sb,&da,&db,&x,&y);
sa=da-sa;sb=db-sb;
if(sa<0)sa*=-1;
if(sb<0)sb*=-1;
if(x<0)x*=-1;
if(y<0)y*=-1;
if((sa!=0&&x==0)||(sb!=0&&y==0)){printf("NO\n");return 0;}
if((sa==0)&&(sb==0)){printf("YES\n");return 0;}
if(((sa%x)!=0)||((sb%y)!=0)){printf("NO\n");return 0;}
if((((max(sa/x,sb/y))-(min(sa/x,sb/y)))%2)!=0){printf("NO\n");return 0;}
printf("YES\n");
return 0;
}

Makes And The Product

排序后求一下组合数就好了。。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=2e5;
LL num[N];
map<LL,LL>ma; LL C(LL n,LL m)
{
LL ans=1;
for(int i=0;i<m;i++)
ans*=n-i;
for(int i=m;i>=2;i--)
ans/=i;
return ans;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%I64d",num+i);
sort(num,num+n);
LL ans=1;
for(int i=0;i<3;i++)
ma[num[i]]++;
LL l=ma[num[2]];
for(int i=3;i<n&&num[i]==num[2];i++)
{
l++;
}
ans=ans*C(l,ma[num[2]]);
printf("%I64d\n",ans);
return 0;
}

Really Big Numbers

肯定存在某个数k 大于k的数都是big number... 二分找最小的k就好了

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL; LL sum(LL x)
{
LL dex=1;
LL ans=0;
while(x>0)
{
ans+=((x%10)*(dex-1));
x/=10;dex*=10;
}
return ans;
} int main()
{
LL n,s;
scanf("%I64d%I64d",&n,&s);
LL l=1,r=n;
LL i;
bool flag=false;
LL ri;
while(l<=r&&r<=n)
{
i=(l+r)>>1;
if(sum(i)>=s){flag=true;ri=i;r=i-1;}
else {l=i+1;}
}
if(flag) {printf("%I64d\n",(n-ri+1));return 0;}
else printf("0\n");
return 0;
}

Imbalanced Array

暴力枚举每个区间 复杂度O(n^2)起步 显然是不可以的。

那么只能考虑每个位置对答案做的贡献。即它是多少个区间的最值?

用栈维护,从前往后一个一个堆栈,并且保证栈中的所有元素构成不上升序列即可。

复杂度O(n)技巧性还是很强的。。

#include <bits/stdc++.h>
using namespace std;
long long n,pos[1000005],neg[1000005];
long long solve(long long a[]){
stack<pair<int,long long>> s;
a[n]=1e8;
s.push({-1,1e9});
long long sum=0;
for(int i=0;i<=n;s.push({i,a[i]}),++i)
while(a[i]>=s.top().second){
auto p=s.top();
s.pop();
auto p2=s.top();
sum+=p.second*(i-p.first)*(p.first-p2.first);
}
return sum;
}
int main(){
ios_base::sync_with_stdio(0);
cin>>n;
for(int i=0;i<n;neg[i]=(-1)*pos[i],++i)
cin>>pos[i];
cout<<solve(pos)+solve(neg);
}

  

Choosing The Commander

很有趣的一道数据结构题

我们考虑 xor运算是按位进行的

    比较大小也可以按位进行

那么 如果我们同样按位储存所有的士兵性格可以么?

是的,用一颗Trie来储存所有的士兵 就可以在logn的时间内完成一个访问了!

#include<bits/stdc++.h>
#define N 3000005
using namespace std;
int size[N],ch[N][2],n,cnt,a,b,type;
inline void ins(int x,int add){
int now=1;
for(int i=26;i>=0;i--){
bool v=((x>>i)&1);
if(!ch[now][v])ch[now][v]=++cnt;
now=ch[now][v];
size[now]+=add;
}
}
inline void query(int x,int y){
int ans=0,now=1,val=0;
for(int i=26;i>=0&&now;i--){
bool xbit=((x>>i)&1),ybit=((y>>i)&1);
val+=val;
if(ybit){
ans+=size[ch[now][xbit]];now=ch[now][!xbit];
val+=!xbit;
}
else{now=ch[now][xbit];val+=xbit;}
}
printf("%d\n",ans);
}
inline int read(){
int f=1,x=0;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
return f*x;
}
int main(){
cnt=1;n=read();
while(n--){
int opt=read(),x=read();
if(opt==1)ins(x,1);
if(opt==2)ins(x,-1);
if(opt==3){
int y=read();
query(x,y);
}
}
}

  

MEX Queries

首先 这道题是离线询问的 也就是我们预知了所有询问。

那么,一个数字如果要成为答案,那么它必然是某个询问的边界值。

所以我们只要维护所有询问的边界值即可,总共有2*10^5个。

用线段树维护,每个命令要么删除某些数,要么增加某些数。

进行完一个命令后,取线段树上存在的且最靠左的值即可。(每个线段树节点保存当前区间存在的整数个数)

#include<bits/stdc++.h>
#define N 400005
#define LL long long
#define TAT "%I64d"
#define L(__) (__ << 1)
#define R(__) (L(__)|1)
using namespace std;
LL sz[4*N],L[N],R[N],w[N]; int q,op[N],tag[4*N],lw;
void TS(int t,int d,int o)
{
if(o==1) tag[t]^=1,sz[t]=d-sz[t];
if(o==2) tag[t]=o,sz[t]=d;
if(o==3) tag[t]=o,sz[t]=0;
}
void push(int t,int d)
{
if(!tag[t]) return ;
TS(L(t),(d+1)/2,tag[t]);
TS(R(t),d/2,tag[t]);
tag[t]=0;
}
void M(int t,int l,int r,int l1,int r1,int op)
{
int mid=(l+r)>>1;
if(l>r1 || r<l1) return ;
if(l>=l1&&r<=r1) return TS(t,r-l+1,op);
push(t,r-l+1);
M(L(t),l,mid,l1,r1,op);
M(R(t),mid+1,r,l1,r1,op);
sz[t]=sz[L(t)]+sz[R(t)];
}
int Q(int t,int l,int r)
{
int mid=(l+r)>>1,x;
if(l==r) return l;
push(t,r-l+1);
if(sz[L(t)]==(r-l)/2+1)
x=Q(R(t),mid+1,r);
else x=Q(L(t),l,mid);
sz[t]=sz[L(t)]+sz[R(t)];
return x;
}
int main()
{
int i;
scanf("%d",&q),w[lw=1]=1;
for(i=1;i<=q;i++){
scanf("%d"TAT""TAT,&op[i],&L[i],&R[i]);
w[++lw]=L[i],w[++lw]=L[i]+1;
w[++lw]=R[i],w[++lw]=R[i]+1;
}
sort(w+1,w+lw+1);
lw=unique(w+1,w+lw+1)-w-1;
for(i=1;i<=q;i++){
L[i]=lower_bound(w+1,w+lw+1,L[i])-w;
R[i]=lower_bound(w+1,w+lw+1,R[i])-w;
M(1,1,lw,L[i],R[i],op[i]%3+1);
printf(TAT"\n",w[Q(1,1,lw)]);
}
return 0;
}

  

Educational Codeforces Round 23 A-F 补题的更多相关文章

  1. Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring

    D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  2. Educational Codeforces Round 23 补题小结

    昨晚听说有教做人场,去补了下玩. 大概我的水平能做个5/6的样子? (不会二进制Trie啊,我真菜) A. 傻逼题.大概可以看成向量加法,判断下就好了. #include<iostream> ...

  3. Educational Codeforces Round 23 F. MEX Queries 离散化+线段树

    F. MEX Queries time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  4. codeforces Educational Codeforces Round 24 (A~F)

    题目链接:http://codeforces.com/contest/818 A. Diplomas and Certificates 题解:水题 #include <iostream> ...

  5. Codeforces Round #585 (Div. 2) [补题]

    前言 2019.9.16 昨天下午就看了看D题,没有写对,因为要补作业,快点下机了,这周争取把题补完. 2019.9.17 这篇文章或者其他文章难免有错别字不被察觉,请读者还是要根据意思来读,不要纠结 ...

  6. Codeforces Round #429 (Div. 2) 补题

    A. Generous Kefa 题意:n个气球分给k个人,问每个人能否拿到的气球都不一样 解法:显然当某种气球的个数大于K的话,就GG了. #include <bits/stdc++.h> ...

  7. Codeforces Round #419 (Div. 1) 补题 CF 815 A-E

    A-C传送门 D Karen and Cards 技巧性很强的一道二分优化题 题意很简单 给定n个三元组,和三个维度的上限,问存在多少三元组,使得对于给定的n个三元组中的每一个,必有两个维度严格小于. ...

  8. Codeforces Round #590 (Div. 3)补题

    要想上2000分,先刷几百道2000+的题再说 ---某神 题目 E F 赛时是否尝试 × × tag math bitmask 难度 2000 2400 状态 ∅ √ 解 E 待定 F 传送门 第一 ...

  9. Educational Codeforces Round 65 E,F

    E. Range Deleting 题意:给出一个序列,定义一个操作f(x,y)为删除序列中所有在[x,y]区间内的数.问能使剩下的数单调不减的操作f(x,y)的方案数是多少. 解法:不会做,思维跟不 ...

随机推荐

  1. POJ 3667 线段树的区间合并简单问题

    题目大意:有一排标号1-N的房间.操作一:询问是不是有连续长度为a的空房间,有的话住进最左边(占用a个房间)操作二:将[a,a+b-1]的房间清空(腾出b个房间)思路:记录每个区间中“靠左”“靠右”“ ...

  2. vue2.0 类淘宝不同屏幕适配及px与rem转换问题

    因为项目需要,vue开发项目,必须将已写的以px为单位的部分,转换为rem.要是全部转换,这大量的计算量,哪怕是sublime Text 的cssrem插件,也是一个庞大的工作量.所以,直接使用插件没 ...

  3. SQL SERVER 2012 第三章 T-SQL 基本语句 having子句

    SELECT ManagerID AS Manager,COUNT(*) AS Reports FROM Human.Resources.Employee2 WHERE EmployeeID !=5 ...

  4. 免费SSL申请

    https://letsencrypt.org/ https://letsencrypt.org/docs/client-options/ ACMESharp (.NET, PowerShell) w ...

  5. Win7查看本地是否安装JDK及安装路径的方法

    工具/原料   win7 方法/步骤   1 开始->点击运行,输入:cmd 2 然后在命令提示符中,输入:java -version  假如看到有版本提示那么安装成功 3 假如忘记了java ...

  6. Shell 脚本小试牛刀(5) -- 超便捷脚本之高速ssh 登录其它主机

    假设你也是以Linux 为工作环境的童鞋,那么此文真是捷报!由于我的学习/工作中(特别是近期玩耍树莓派)常常会使用到ssh 登录其它主机,而每次使用ssh 登录都须要输入老长一大串让我非常烦.所以我写 ...

  7. centos7备份还原与grub2引导和rescue模式修改root密码

    一.centos7备份1.su -2.cd /3.tar -zpPcvf backup.tgz --exclude=/sys --exclude=/mnt --exclude=/proc --excl ...

  8. No module named '_sqlite3'问题解决

    Centos自带的python版本是2.7的,后面我自己装了3.5版本的,在创建应用的时候python manager.py startapp users 时,就会报No module named ' ...

  9. dva/dynamic

    1.安装: yarn add dva 2.引入: import dynamic from 'dva/dynamic'; * dva路由跳转 * dynamic(app, model, componen ...

  10. 杭电1232畅通project

    畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...