正解:思维题

解题报告:

传送门!

这题就是很思维题,,,想到辣实现麻油特别难,但难想到是真的TT

这题主要是要发现一个性质:&1无意义,&0相当于赋值为0,|1无意义,|1相当于赋值为1

然后知道这个性质就可以得到,要想凑出1.一定是最后一个有意义的为|1,要想凑出0,一定是最后一个有意义的为&0

很容易发现的是各个位数之间是麻油什么关系的,所以分开考虑

现在就当只考虑第i位,把这n个数的第i位全部扒出来,从右往左组成一个新的二进制数x

然后也把n个操作扒出来,&=1,|=0,从右往左组成一个新的二进制数y

然后现在这么思考,&1与|0无意义在这么表示之后是什么意思呢?就是第i位上xi=yi,对趴

然后如果说是&0,那就是xi>yi,如果说是|1,那就是xi<yi

再结合一下前面的分析,可以得到当这一维的ans=0时表示y>x,否则y<x

但还有一个特殊情况,就是因为它最初的值是0,所以y=x的时候也会有ans=0

然后对于这m位每位都这么做,就可以得到一个不等式组,然后解一下就会得到l<=y<r

所以ans=r-l

然而这并没有完美结束来着,,,这个要实现还挺难的,要动态维护字典序balabala的,,,就很麻烦,,,明天具体写做法,先写下这个的另一种做法,就简单那很多QwQ

可以先对x排序,然后找到xi>y>xi-1的点,答案就是xi-xi-1辣!

然后就完美结束w!

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define ll long long
#define rp(i,x,y) for(rg ll i=x;i<=y;++i) int main()
{
freopen("xbyx.in","w",stdout);
srand(time(NULL));
ll n=rand()%+,m=rand()%+,q=rand()%+;printf("%lld %lld %lld\n",n,m,q);
rp(i,,n){rp(j,,m){ll tmp=rand();if(tmp&)printf("");else printf("");}printf("\n");}
rp(i,,q){rp(j,,m){ll tmp=rand();if(tmp&)printf("");else printf("");}printf("\n");}
return ;
}

make!

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define rg register
#define ll long long
#define gc getchar()
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i)
#define e(x) for(rg ll i=head[x];i;i=edge[i].nxt)
#define t(i) edge[i].to const ll N=+,M=+,mod=;
ll n,m,q,num[M],poww;
bool cnt[M];
struct node{ll a[N],id,as;}nod[M]; il ll read()
{
rg char ch=gc;rg ll x=;rg bool y=;
while(ch!='-' && (ch<'' || ch>''))ch=gc;
if(ch=='-')ch=gc,y=;
while(''<=ch && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il ll inc(ll x,ll y){return x+=y,x<mod?x:x-mod;}
il ll dec(ll x,ll y){return x-=y,x<?x+mod:x;}
il bool cmp(node gd,node gs){rp(i,,n)if(gd.a[i]!=gs.a[i])return gd.a[i]>gs.a[i];}
il ll print(int x){return inc(dec(nod[x-].as,nod[x].as),x==);} int main()
{
freopen("xbyx.in","r",stdin);freopen("xbyx.out","w",stdout);
n=read();m=read();q=read();poww=;
rp(i,,n)
{
string s;cin>>s;s=' '+s;
rp(j,,m)nod[j].a[n-i+]=s[j]^'',nod[j].as=inc(nod[j].as,poww*(s[j]^''));
poww=(poww<<)%mod;
}
rp(i,,m)nod[i].id=i;sort(nod+,nod++m,cmp);rp(i,,m)num[nod[i].id]=i;
poww=;rp(i,,n)nod[].a[i]=,nod[].as=inc(nod[].as,poww),poww=(poww<<)%mod;
/*
rp(i,1,m)
{
printf("id=%lld i=%lld\n",nod[i].id,i);
rp(j,1,n)
{
printf("%lld",nod[i].a[j]);
}
printf("\n\n----------------------------------------------------------------\n");
}
*/
while(q--)
{
string s;cin>>s;s=' '+s;rp(i,,m)cnt[num[i]]=s[i]^'';//rp(i,1,m)printf("i=%lld cnt=%lld\n",i,cnt[i]);
// cout<<"s="<<s<<endl;
bool t=,flg=;
rp(i,,m)
{
// printf(" gg : t=%lld cnt=%lld\n",t,cnt[i]);
if(t && cnt[i]){flg=;break;}
t=cnt[i]^;
}
if(flg)puts("");
else
{
rp(i,,m+)
if(!cnt[i])
{
printf("%d\n",inc(dec(nod[i-].as,nod[i].as),i==));
break;
}
}
}
return ;
}

洛谷P4424 寻宝游戏 [HNOI/AHOI2018]的更多相关文章

  1. BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...

  2. BZOJ5288 & 洛谷4436 & LOJ2508:[HNOI/AHOI2018]游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5288 https://www.luogu.org/problemnew/show/P4436 ht ...

  3. 洛谷 P2197 nim游戏

    洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...

  4. 洛谷 P1965 转圈游戏

    洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...

  5. [Bzoj5285][洛谷P4424][HNOI/AHOI2018]寻宝游戏(bitset)

    P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生 ...

  6. 洛谷 P1000 超级玛丽游戏

    P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级 ...

  7. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山

    前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...

  8. $loj10156/$洛谷$2016$ 战略游戏 树形$DP$

    洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...

  9. 洛谷P1000 超级玛丽游戏(洛谷新手村1-1-1)

    题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...

随机推荐

  1. Nginx 用户认证

    访问一些比较私密的页面 ( 如管理后台,数据后台 ) 时,我们就可以设置访问该页面时需要使用用户名和密码进行验证,这就是用户认证 [root@localhost ~]$ cat /usr/local/ ...

  2. unity3d抛物线的脚本

    using UnityEngine; using System.Collections; public class ProjectileTest : MonoBehaviour { public Ga ...

  3. SQL 查询结果保存为 临时表

    -- 1. 在使用select into前,可以先做一下判断 if OBJECT_ID('tempdb..#TT')is not NULL drop table #TT -- 2. 查询结果保存为临时 ...

  4. 【转】C++可变参数列表处理宏va_list、va_start、va_end的使用

    VA_LIST是在C语言中解决变参问题的一组宏他有这么几个成员: 1)va_list型变量: #ifdef     _M_ALPHA typedef    struct{ char* a0; /*po ...

  5. vue - 父组件数据变化控制子组件类名切换

    先说当时的思路和实现核心是父子组件传值和v-bind指令动态绑定class实现 1. 父组件引用.注册.调用子组件script中引用 import child from '../components/ ...

  6. G711算法学习

    采样和量化 首先需要明确的两个概念,“采样”和“量化”.对于给定的一个波形,采样是从时间上将连续变成离散的过程,而采样得到的值,可能还是不能够用给定的位宽(比如8bit)来表示,这就需要经过量化,即从 ...

  7. Matlab当中size() length()等函数讲解

    在Matlab中: size:获取数组的行数和列数 length:数组长度(即行数或列数中的较大值) numel:元素总数. s=size(A): 当只有一个输出参数时,返回一个行向量,该行向量的第一 ...

  8. vscode 修改(自定义)插件的快捷键

    简单的使用了一下vscode,已经感受到了它的强大. 修改插件的快捷键: 1.快捷键command+k 按完之后再按command+s,弹出一个快捷键列表(code->首选项->键盘快捷方 ...

  9. listctrl查找定位 使用测试过还很好用

    35.listctrl查找定位  使用测试过还很好用 // 简单的查找函数// FindString(CListCtrl& , 查找内容 , 开始位置 , 到达底部时是否从头查找) int F ...

  10. 盘古分词修改支持mono和lucene.net3.03

    盘古分词平台兼容性 在使用Lucece.net,需要一个中文的分词组件,比较好的是盘古分词,但是我希望能够在mono的环境下运行,就使用moma检查了一下盘古分词 Assembly Version M ...