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的更多相关文章

  1. FOI 冬令营 Day6

    目录 T1.堆(heap) 传送门 Code T2.密文(secret) 传送门 Code T3.树(tree) 传送门 Code 别问Day5到底去哪里了,咕咕咕 T1.堆(heap) 传送门 Co ...

  2. FOI冬令营 Day4

    目录 T1.循环流(flow) 传送门 Code T2.整除分块(mex) 传送门 Code T3.森林(forest) 传送门 Code 咕咕咕 T1.循环流(flow) 传送门 Code /* 特 ...

  3. FOI冬令营 Day2

    目录 T1.直径(diameter) 传送门 Code T2.定价(price) 传送门 Code T3.排序(sort) 传送门 Code T1.直径(diameter) 传送门 Code //20 ...

  4. FOI冬令营 Day1

    目录 T1.全连(fc) 传送门 Code  T2.原样输出(copy) 传送门 Code  T3.不同的缩写(diff) 传送门 Code  打算把省冬的题目放上来,主要是防止自己偷懒不订正 T1. ...

  5. AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)

    P4746 C’s problem(c)   时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比 ...

  6. 清北学堂2017NOIP冬令营入学测试P4749 C’s problem(c)

    P4746 C's problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比较差 ...

  7. 清北学堂2017NOIP冬令营入学测试P4749 F’s problem(f)

    时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 这个故事是关于小F的,它有一个怎么样的故事呢. 小F是一个田径爱好者,这天它们城市里正在 ...

  8. 清北学堂2017NOIP冬令营入学测试P4747 D’s problem(d)

    时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题 描述 题目描述 小D是一名魔法师,它最喜欢干的事就是对批判记者了. 这次记者招待会上,记者对 ...

  9. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

随机推荐

  1. hdu 2353 n皇后问题

    Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于给定的N, ...

  2. SVN_05用戶管控

    安全性设置 [1]在左侧的User上点击右键 输入上面的信息,点击OK,我们就创建一个用户了. 说明:注意到了下面图中的Groups,是的,也可以先创建组,把用户添加到各个组中,然后对组进行授权,操作 ...

  3. ESlint 格式化代码 备忘

    vscode 代码格式化配置 vscode 菜单 文件->首选项->设置 --->进入扩展查找到ESlint,点击任一选项中的[在setting.json中配置],复制以下代码 { ...

  4. springboot_3

    1. 返回数据与返回页面 在写web项目的时候,controller里的返回值一般分为两种,一种是返回页面,也就是ModeAndView,另一种是直接返回数据,比如json格式的数据. 返回一个页面, ...

  5. webstorm处理代码冲突

     出现这个冲突界面后,不要关闭弹窗,不然会把冲突更新下来,也不要点merge. 正确做法:双击文件开始解决冲突!!!!

  6. vue滚动分页加载以及监听事件处理

    <template> <div class="bodyContainer"> <div class="allContent" id ...

  7. Vivado cordic IP求模求角教程

    前言 当需要对复数求模的时候,用FPGA怎么求呢?怎么开根号? 方法1:先求幅值平方和,再使用cordic IP开根号.(蠢办法) 方法2:直接用cordic求取模值. 此处只介绍方法2,资源占用更少 ...

  8. MySQL binlog反解析

    反解析delete语句 背景:delete table忘了加条件导致整张表被删除 恢复方式:直接从binlog里反解析delete语句为insert进行恢复 导出删指定表的DELETE语句: # my ...

  9. 原生Ajax代码实现

    Ajax Asynchronous JavaScript And XML   异步: 指一段程序执行时不会阻塞其他程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序 ,相反的则为同步, 自己 ...

  10. Python_continue_break语句

    1.continue,break语句: userArray=['张三','李四','王五','老六'] for name in userArray: if(name=='王五'): continue ...