• CF949E Binary Cards 题解

    题面

    首先发现:一个数最多会出现1次;

    然后深入推出:一个数不会既用它又用它的相反数;

    这样就可以依次考虑每一位了:
    如果所有的数都不含有这一位,那么就直接把所有的数除以2

    如果含有,那么就减去这一位的数,再除以2;

    2

    当含有的时候搜索就可以了;

    注意需通过去重来优化dfs,否则会TLE掉;

    #include <bits/stdc++.h>
    #define N 100010
    using namespace std;
    int a[N],b[21][N],ans[N],st[N],top=0;
    int anss=INT_MAX;
    void dfs(int dep,int n){
        if(n<=1&&!b[dep][1]){
            if(top<anss){
                anss=top;
    			for(int i=1;i<=top;i++){
    				ans[i]=st[i];
    			}
            }
            return;
        }
        if(dep>20||top>=anss){
        	return;
        }
        bool flag=1;
        for(int i=1;i<=n;i++){
        	if(b[dep][i]&1){
    			flag=0;
    			break;
            }
        }
        if(flag){
            for(register int i=1;i<=n;i++){
            	b[dep+1][i]=b[dep][i]/2;
            }
            n=unique(b[dep+1]+1,b[dep+1]+n+1)-b[dep+1]-1;
            dfs(dep+1,n);
            return;
        }
        else{
            for(register int i=1;i<=n;i++){
            	if(b[dep][i]&1){
            		b[dep+1][i]=(b[dep][i]-1)/2;
            	}
                else{
                	b[dep+1][i]=b[dep][i]/2;
                }
            }	            
            st[++top]=1*(1<<dep);
            register int tmp=unique(b[dep+1]+1,b[dep+1]+n+1)-b[dep+1]-1;
            dfs(dep+1,tmp);
            top--;
            for(register int i=1;i<=n;i++){
            	if(b[dep][i]&1){
            		b[dep+1][i]=(b[dep][i]+1)/2;
            	}
                else{
                	b[dep+1][i]=b[dep][i]/2;
                }
            }	            
            st[++top]=-1*(1<<dep);
            tmp=unique(b[dep+1]+1,b[dep+1]+n+1)-b[dep+1]-1;
            dfs(dep+1,tmp);
            top--;
        }   
    }
    int main()
    {
        register int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
        	scanf("%d",&a[i]);
        }
        sort(a+1,a+n+1);
        n=unique(a+1,a+n+1)-a-1;
        for(int i=1;i<=n;i++){
        	b[0][i]=a[i];
        }
        dfs(0,n);
        printf("%d\n",anss);
        for(int i=1;i<=anss;i++){
        	printf("%d ",ans[i]);
        }
    }
    
    相关文章
    相关标签/搜索
    每日一句
      每一个你不满意的现在,都有一个你没有努力的曾经。
    公众号推荐
       一个历史类的公众号,欢迎关注
    一两拨千金
    4337铁算开奖结果果 小说 长葛市| 永康市| 翁牛特旗| 尼玛县| 沙洋县| 班玛县| 楚雄市| 洛隆县| 普宁市| 宿迁市| 渭源县| 嵊州市| 富平县| 育儿| 红安县| 惠水县| 丰都县| 青铜峡市| 仁寿县| 咸宁市| 平昌县| 定西市| 永善县| 泗水县| 丘北县| 星座| 永仁县| 玉环县| 兴海县| 高碑店市| 石林| 通城县| 连平县| 江北区| 原平市| 岢岚县| 陈巴尔虎旗| 邮箱| 耒阳市| 闽清县| 同仁县| 甘洛县| 太仆寺旗| 磐石市| 红安县| 健康| 高陵县| 黑龙江省| 望都县| 嵊州市| 惠东县| 益阳市| 卫辉市| 黄冈市| 北宁市| 天门市| 突泉县| 工布江达县| 黔西| 竹北市| 临泉县| 砚山县| 海晏县| 山西省| 哈尔滨市| 新民市| 伊吾县| 察雅县| 南澳县| 沛县| 萍乡市| 滕州市| 新竹县| 永康市| 汉源县| 兴海县| 积石山| 安顺市| 鄂伦春自治旗| 三门县| 万载县| 南雄市| 惠来县| 萍乡市| 松江区| 三河市| 军事| 华阴市| 凤阳县| 读书| 汉源县| 绍兴市| 元江| 宜都市| 山丹县| 福州市| 通江县| 水城县| 万源市| 平潭县| 大宁县| 宝鸡市| 谷城县| 微山县| 呼图壁县| 鄂托克旗| 乌拉特中旗| 石嘴山市| 伊金霍洛旗| 武陟县| 温泉县| 西吉县| 乌鲁木齐县| 尉氏县| 凤阳县| 开化县| 扬中市| 奉贤区| 中宁县| 阳新县| 开鲁县| 金沙县| 锡林郭勒盟| 通河县| 莲花县| 郁南县| 罗甸县| 丁青县| 且末县| 吕梁市| 塘沽区| 宜川县| 堆龙德庆县| 宽城| 盐城市| 吉木萨尔县| 韩城市| 通许县| 呼和浩特市| 定边县| 平和县| 陆良县| 喀喇沁旗| 陵川县| 鹿邑县| 北川| 吴桥县| 西乌珠穆沁旗| 太和县| 新丰县| 临邑县| 姜堰市| 天津市| 白银市| 皋兰县| 萍乡市| 边坝县| 绍兴市| 芦山县| 泰来县| 岳阳市| 莎车县| 故城县| 繁昌县| 枣庄市| 常州市| 临邑县| 即墨市| 门头沟区| 东莞市| 定远县| 武安市| 龙川县| 双城市| 勐海县| 同江市| 桐梓县| 陈巴尔虎旗| 镇坪县| 衢州市| 延川县| 江陵县| 木兰县| 涞水县| 马龙县| 阿图什市| 秭归县| 通化市| 镇安县| 共和县| 奉化市| 神木县| 宣城市| 礼泉县| 安乡县| 子洲县| 平遥县| 凤阳县| 宜州市| 从江县| 永平县| 油尖旺区| 荔浦县| 伊春市| 从江县| 长兴县| 芒康县| 利津县| 会宁县| 博罗县| 贵定县| 汾西县| 乌恰县| 来安县| 溆浦县| 蓬溪县| 佛坪县| 靖州| 万州区| 汕尾市| 商水县| 饶阳县| 白玉县| 临江市| 尚义县| 多伦县| 海淀区| 溆浦县| 岑溪市| 平潭县| 马关县| 鄂托克前旗| 文成县| 孟津县| 醴陵市| 邵阳县| 鹤壁市| 织金县| 翁源县| 通山县| 西城区| 晋江市| 盐津县| 白山市| 罗定市| 无锡市| 紫金县| 桂东县| 宜春市| 花莲县| 南陵县| 申扎县| 奈曼旗| 南陵县| 崇左市| 田林县| 桂平市| 张家港市| 谢通门县| 淅川县| 灵丘县| 濮阳县| 柞水县| 霍州市| 邵武市| 双流县| 兴文县| 图木舒克市| 衢州市| 黔西县| 望谟县| 沽源县| 绵阳市| 晴隆县| 灵川县| 阳新县| 长汀县| 轮台县| 罗山县| 丹东市| 绵阳市| 敦煌市| 武城县| 安塞县| 环江| 雷波县| 会东县| 通海县| 宁津县| 晋江市| 霍林郭勒市| 丰宁| 广州市| 巴彦县| 同仁县| 巩义市| 富裕县| 陈巴尔虎旗| 佛学| 北票市| 榆中县| 吉水县| 墨脱县| 砀山县| 安塞县| 西安市| 天祝| 乃东县| 佳木斯市| 米林县| 潮安县| 常德市| 阿拉善左旗| 基隆市| 荥阳市| 乌鲁木齐县| 襄樊市| 当雄县| 抚远县| 开化县| 徐闻县| 教育| 吴堡县| 娄烦县| 京山县| 东乡| 高青县| 乐东| 灵璧县| 扬州市| 漳浦县| 外汇| 古田县| 安康市| 绥棱县| 攀枝花市| 定边县| 昌黎县| 和龙市| 光泽县| 兴化市| 温泉县| 县级市| 崇礼县| 康保县| 自贡市| 海林市| 永平县| 会昌县| 和政县| 托里县| 封丘县| 双牌县| 桑植县| 阳信县| 南宁市| 武邑县| 忻州市| 读书| 玛曲县| 嘉黎县| 象州县| 正阳县| 双鸭山市| 申扎县| 华安县| 和平区| 宜阳县| 雷山县| 马边| 宕昌县| 积石山| 丹凤县| 吉木乃县| 大港区| 北票市| 岢岚县| 乌拉特后旗| 漯河市| 洛阳市| 仁布县| 宁德市| 东方市| 永仁县| 潞城市| 浦江县| 任丘市| 安陆市| 丁青县| 汾阳市| 柳河县| 福清市| 祁东县| 惠州市| 邵阳市| 辰溪县| 远安县| 虹口区| 库车县| 璧山县| 丰城市| 天祝| 新巴尔虎右旗| 蒲城县| 余姚市| 沙坪坝区| 阿勒泰市| 凤阳县| 巴林右旗| 新民市| 时尚| 光泽县| 墨脱县| 调兵山市| 江孜县| 四平市| 西丰县| 类乌齐县| 增城市| 黄山市| 桃园县| 商丘市| 志丹县| 文安县| 青岛市| 剑阁县| 兴城市| 长春市| 绥滨县| 文登市| 盐津县| 雷山县| 合水县| 绵阳市| 凤凰县| 甘南县| 正镶白旗| 河北区| 腾冲县| 常山县| 峨眉山市| 德州市| 镇安县| 南和县| 双峰县| 阳东县| 雷山县| 汉寿县| 天气| 广宗县| 阜宁县| 安仁县| 托克逊县| 霞浦县| 保康县| 息烽县| 云南省| 上高县| 二连浩特市| 家居| 津市市| 竹溪县| 凌源市| 会宁县| 阳江市| 阿尔山市| 桂林市| 寻甸| 津南区| 高邮市| 长岛县| 成武县| 石阡县| 黔西县| 紫云| 天柱县| 武城县| 安远县| 沙雅县| 剑川县| 建瓯市| 阜平县| 淅川县| 乌什县| 广德县| 泸水县| 乌拉特后旗| 阿克陶县| 洛浦县| 陵川县| 邢台县| 买车| 马龙县| 贺州市| 含山县| 文成县| 灵石县| 阿勒泰市| 崇左市| 抚顺市| 尉犁县| 瑞昌市| 江津市| 哈巴河县| 平原县| 舞阳县| 库车县| 静海县| 高邑县| 临泽县| 黄平县| 荔波县| 彭阳县| 新蔡县| 安平县| 宁南县| 肃北| 双流县| 铁岭县| 洛阳市| 延长县| 宝坻区| 凌源市| 常熟市| 宣化县| 安国市| 台湾省| 清镇市| 信宜市| 长垣县| 阳曲县| 铜梁县| 阿拉善右旗| 新绛县| 宁陵县| 子洲县| 平湖市| 德保县| 运城市| 芮城县| 龙海市| 荥阳市| 将乐县| 临沧市| 阳朔县| 陆丰市| 江都市| 灯塔市| 容城县| 米泉市| 翁源县| 花莲市| 石台县| 广元市| 扎赉特旗| 玉田县| 黎平县| 五河县| 鄯善县| 台中市| 馆陶县| 辽宁省| 新兴县| 利津县| 武鸣县| 新营市| 宜良县| 芜湖市| 云阳县| 南京市| 汕尾市| 宜兰市| 垦利县| 渝中区| 岢岚县| 古蔺县| 永宁县| 广西| 东辽县| 通榆县| 黑山县| 迁西县| 修武县| 翼城县| 孟村| 监利县| 靖远县| 贺州市| 焉耆| 会昌县| 大邑县| 河源市| 铜川市| 丰台区| 苏尼特右旗| 德安县| 盐山县| 页游| 三台县| 厦门市| 澄城县| 寻乌县| 双桥区| 岢岚县| 葵青区| 佳木斯市| 醴陵市| 江安县| 东城区| 安溪县| 宁津县| 陆丰市| 广元市| 河南省| 南汇区| http://m.ymbawp.fit http://zjlbaa.fit http://www.pbbugl.fit http://www.zvljnr.fit http://wap.agyusn.fit http://m.uadmge.fit http://abvavq.fit http://m.oomssu.fit http://m.mtbowx.fit http://m.navdvv.fit http://www.vircis.fit http://wap.kuyspu.fit http://www.asvfaa.fit http://xpndvs.fit http://m.vpufvt.fit http://m.fskeqq.fit http://m.pncvgf.fit http://wap.sngxtc.fit