zoukankan      html  css  js  c++  java
  • Jzoj3908 吴传之火烧连营 (梦回三国系列)

    【题目背景】
    蜀汉章武元年(221年),刘备为报吴夺荆州、关羽被杀之仇,率大军攻吴。吴将陆逊为避其锋,坚守不战,双方成对峙之势。蜀军远征,补给困难,又不能速战速决,加上入夏以后天气炎热,以致锐气渐失,士气低落。刘备为舒缓军士酷热之苦,命蜀军在山林中安营扎寨以避暑热。陆逊看准时机,命士兵每人带一把茅草,到达蜀军营垒时边放火边猛攻。蜀军营寨的木栅和周围的林木为易燃之物,火势迅速在各营漫延。蜀军大乱,被吴军连破四十余营。陆逊火烧连营的成功,决定了夷陵之战蜀败吴胜的结果。
     
    【问题描述】

    刘备带兵深入吴境,陆逊却避而不出,蜀军只得在山林中安营扎寨。而刘备在扎营时却犯了兵家大忌,将兵营排列成一条直线,远远看去,就像是一条串着珠子的链,美其名曰:链寨。如果吴军将领是一般人,那么这也许不算什么,而陆逊何许人也,他可是江东才子,能力不低于周瑜的一代儒将。他看到刘备这样排阵,心生一计,决定用火攻破阵。然而,火计除了要有风,选定引火点也非常重要,对于刘备的布阵,最佳引火点一定是n个兵营中的一个。而因为风水轮流转,每天的最佳引火点都不一样。我们给每个兵营定下一个固定不变的火攻值Ai,每天定下一个风水值K,对于每天的最佳引火点,显然是所有兵营中火攻值与风水值异或的结果最大的那一个兵营。然而,陆逊是个谨慎的人,他要观察时机,在m天中选定一个最佳的进攻的日期,为此他演算出了这m天每天的风水值,然后他希望你能够告诉他这m天每天最佳引火点的兵营编号。


    这题十分套路,就是Trie,具体不多说了

    #pragma GCC opitmize("O3")
    #pragma G++ opitmize("O3")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define N 100010
    using namespace std;
    int s[N<<5][2],cnt=1,n,m;
    void insert(int k,int pos){
    	int x=1; bool d;
    	for(int i=31;~i;--i){
    		d=(k&(1<<i));
    		if(!s[x][d]) s[x][d]=++cnt;
    		x=s[x][d];
    	}
    	s[x][0]=pos;
    }
    int gMax(int k){
    	int x=1; bool d;
    	for(int i=31;~i;--i){
    		d=!(k&(1<<i));
    		if(s[x][d]) x=s[x][d];
    		else x=s[x][!d];
    	}
    	return s[x][0];
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int x,i=0;i<n;++i){
    		scanf("%d",&x);
    		insert(x,i+1);
    	}
    	for(int x,i=0;i<m;++i){
    		scanf("%d",&x);
    		printf("%d
    ",gMax(x));
    	}
    }

  • 相关阅读:
    JID 2.0 RC4 发布,高性能的 Java 序列化库
    FBReaderJ 1.6.3 发布,Android 电子书阅读器
    Arquillian 1.0.3.Final 发布,单元测试框架
    JavaScript 的宏扩展 Sweet.js
    Hypertable 0.9.6.5 发布,分布式数据库
    JRuby 1.7.0 发布,默认使用 Ruby 1.9 模式
    httppp 1.4.0 发布,HTTP响应时间监控
    Redis 2.6.0 正式版发布,高性能K/V服务器
    OfficeFloor 2.5.0 发布,IoC 框架
    XWiki 4.3 首个里程碑发布
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/9477332.html
Copyright © 2011-2022 走看看