FOI冬令营 Day 3
T1、签到题(sort)
传送门
原题:LOJ 2767
Code
//2019/2/14
//50pts
#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define MN 1000005
int n,q,a[MN],pw2[35];
int d[MN][35];bool r[MN];
inline void solve()
{
register int i,j;
memset(r,0,sizeof r);
int ret=0;r[n]=true;
for(i=30;~i;--i)
{
int ans=-1;
for(j=1;j<=n;)
{
if(r[j]){++j;continue;}
int hr=d[j][i],k;
for(k=j+1;!r[k-1]&&d[k][i]==hr;++k);
if(r[k-1]){j=k;continue;}
int tl=d[k][i],l;
for(l=k+1;!r[l-1]&&d[l][i]==tl;++l);
if(!r[l-1]) {puts("-1");return;}
j=l;
if(hr>tl)
{
if(ans==-1) ans=1;
if(ans==0) {puts("-1");return;}
}
else
{
if(ans==-1) ans=0;
if(ans==1) {puts("-1");return;}
}
r[k-1]=true;
}
if(ans==1) ret+=pw2[i];
}
printf("%d\n",ret);
}
int main()
{
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
n=read();register int i,S,ans,j;
pw2[0]=1;
for(i=1;i<=30;++i) pw2[i]=pw2[i-1]<<1;
for(i=1;i<=n;++i) a[i]=read();
for(i=1;i<=n;++i) for(S=a[i],j=0;S>0;++j,S>>=1) d[i][j]=S&1;
solve();
q=read();
register int p,val;
while(q--)
{
p=read();val=read();
memset(d[p],0,sizeof d[p]);
for(i=0;val>0;++i,val>>=1) d[p][i]=val&1;
solve();
}
return 0;
}
/*
只要考虑相邻两行的最高的不相同的位,记录一下每个位的情况即可
2019/2/14 21:48~22:14
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define MN 1000005
int n,q,d[MN][31],f[31][2];
int pw2[31];
inline void add(int x,int y)
{
register int i;
for(i=30;~i&&d[x][i]==d[y][i];--i);
if(i==-1) return;
++f[i][d[x][i]>d[y][i]];
}
inline void dec(int x,int y)
{
register int i;
for(i=30;~i&&d[x][i]==d[y][i];--i);
if(i==-1) return;
--f[i][d[x][i]>d[y][i]];
}
inline int solve()
{
register int i,ret=0;
for(i=0;i<=30;++i)
if(f[i][0]>0&&f[i][1]>0) return -1;
else if(f[i][1]>0) ret+=pw2[i];
return ret;
}
int main()
{
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
n=read();
register int i,j,S;
for(pw2[0]=1,i=1;i<=30;++i) pw2[i]=pw2[i-1]<<1;
for(i=1;i<=n;++i) for(S=read(),j=0;S>0;++j,S>>=1) d[i][j]=S&1;
q=read();
for(i=2;i<=n;++i) add(i-1,i);
printf("%d\n",solve());
while(q--)
{
int pos=read();
if(pos>1) dec(pos-1,pos);
if(pos<n) dec(pos,pos+1);
memset(d[pos],0,sizeof d[pos]);
for(S=read(),j=0;S>0;++j,S>>=1) d[pos][j]=S&1;
if(pos>1) add(pos-1,pos);
if(pos<n) add(pos,pos+1);
printf("%d\n",solve());
}
}
T2、送分题(queue)
原题:LOJ 2734 / 洛谷 如厕计划
传送门
Code
/*
我们先考虑怎样的序列是满足条件的。
不难发现,对于男生=女生的情况
显然每次都是一男一女如厕,充要条件是,对于任何一个后缀,男生<=女生,这很显然
而对于男生<女生的情况显然是无解的
对于女生>男生的情况,我们可以把多出来的女生变成男生,使他满足上面的条件
我们可以从头开始往后扫,只要当前位是女生,且往后的女生>男生,就把这个女生变成男生
不难发现,满足条件的序列就是,对于任何一个后缀,男生<=女生
换言之,就是从后往前的第i个女生的位置应该在从后往前的第2i个位置之后(不包括第2i个位置)
从后往前扫,如果当前第i个女生的位置不对,就把她移到第2i个位置上,这样贪心很正确
假设第i个女生和2i匹配,那么ans=max{Val_i=pos_i-2i}
对每个复读串(设当前的长度为x,女生数为y)分别处理,那么每复读一次,每个女生的 Val值减少2y-x
所以,如果2y-x>0只需考虑第一个复读串
如果2y-x<0,只需考虑最后一个复读串
当然如果已经考虑到了第n个女生,之后的女生Val<0,就不用再扫啦
2019/2/14
题解写于2019/2/15 12:43
*/
#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define MN 100005
std::string s[MN];
ll n,m,l,ans,x[MN];
void solve(std::string &s,int siz)
{
for(int i=siz;i--;--l)
if(s[i]=='F'&&n) --n,ans=max(ans,2*n+1-l);
}
int main()
{
freopen("queue.in","r",stdin);
freopen("queue.out","w",stdout);
register int i,j,y;
n=read(),m=read();l=n<<1;
for(i=1;i<=m;++i) std::cin>>s[i],x[i]=read();
for(i=m;i;--i)
{
register int siz=s[i].size();
for(j=y=0;j<siz;++j) y+=s[i][j]=='F';
if((y<<1)-siz>=0)
{
solve(s[i],siz);
l-=(x[i]-1)*siz;n-=(x[i]-1)*y;
if(n<=0)break;
}
else
{
l-=(x[i]-1)*siz;n-=(x[i]-1)*y;
solve(s[i],siz);
if(n<=0) break;
}
}
return 0*printf("%lld\n",n>0?-1:ans);
}
T3、简单题(game)
传送门
原题:LOJ 2731
Code
咕咕咕
Blog来自PaperCloud,未经允许,请勿转载,TKS!
FOI冬令营 Day 3的更多相关文章
- FOI 冬令营 Day6
目录 T1.堆(heap) 传送门 Code T2.密文(secret) 传送门 Code T3.树(tree) 传送门 Code 别问Day5到底去哪里了,咕咕咕 T1.堆(heap) 传送门 Co ...
- FOI冬令营 Day4
目录 T1.循环流(flow) 传送门 Code T2.整除分块(mex) 传送门 Code T3.森林(forest) 传送门 Code 咕咕咕 T1.循环流(flow) 传送门 Code /* 特 ...
- FOI冬令营 Day2
目录 T1.直径(diameter) 传送门 Code T2.定价(price) 传送门 Code T3.排序(sort) 传送门 Code T1.直径(diameter) 传送门 Code //20 ...
- FOI冬令营 Day1
目录 T1.全连(fc) 传送门 Code T2.原样输出(copy) 传送门 Code T3.不同的缩写(diff) 传送门 Code 打算把省冬的题目放上来,主要是防止自己偷懒不订正 T1. ...
- AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)
P4746 C’s problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比 ...
- 清北学堂2017NOIP冬令营入学测试P4749 C’s problem(c)
P4746 C's problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比较差 ...
- 清北学堂2017NOIP冬令营入学测试P4749 F’s problem(f)
时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 这个故事是关于小F的,它有一个怎么样的故事呢. 小F是一个田径爱好者,这天它们城市里正在 ...
- 清北学堂2017NOIP冬令营入学测试P4747 D’s problem(d)
时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题 描述 题目描述 小D是一名魔法师,它最喜欢干的事就是对批判记者了. 这次记者招待会上,记者对 ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
随机推荐
- 第2章 NIO入门
2.1 传统的BIO编程 以服务器为例,在传统BIO模型下的服务器,每当一个新的请求到来的时候回分配一个线程去处理该请求,并且该线程在执行IO操作的时候会一直阻塞,知道IO操作完成或抛出异常才会返回. ...
- 使用其他身份运行计算机(DOS命令)
runas/user:administrator cmd d: cd esop sfispri.ini
- mongodb入门基本语法
show dbs 查看所有数据库列表 二. 创建数据库 使用数据库. 创建数据库 use student 如果真的想把这个数据库创建成功, 那么必须插入一个数据. 数据库中不能直接插入数据,只能往集合 ...
- for_each使用方法详解
for_each使用方法详解[转] Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL)曾經討論過for_each(),不過當時功力尚淺, ...
- K2 BPM_加班党们,说好不哭还是说好不秃?_流程管理
早上经过财务小陈的办公桌 看到她正边看手机边默默流泪 诶?这不是这两天刷屏的 周杰伦的<说好不哭>吗 小陈你怎么哭啦,这歌让你想到前男友了吗? ...... (摇头) 小陈擦擦眼泪 唱起了 ...
- Vue指令之`v-model`和`双向数据绑定
v-bind 只能实现数据的单向绑定,从 M 自动绑定到 V, 无法实现数据的双向绑定 <input type="text" v-bind:value="msg& ...
- dict sorted by value. 字典根据 值排序
d = [('a', 24), ('g', 52), ('i', 12)] print(sorted(d),key = lambda x:x[1]) sorted (字典,排序的依据: 字典[key] ...
- SpringCloud2.0 概述 基础教程(一)
1.SpringCloud简介 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举 ...
- Luogu P2935 最好的地方Best Spot
Luogu P2935 最好的地方Best Spot 这道题就是一道近乎裸的Floyd,因为数据很小,所以用领接表存图就可以了. #include<bits/stdc++.h> #defi ...
- 26.C# 文件系统
1.流的含义 流是一系列具有方向性的字节序列,比如水管中的水流,只不过现在管道中装的不是水,而是字节序列.当流是用于向外部目标比如磁盘输出数据时称为输出流,当流是用于把数据从外部目标读入程序称为输入流 ...