A - Alchemy 101

题意: 输入一个数m,求出从1到m中异或和等于m且是所有情况中包含的数字最多和字典序最小的那一串数。

我的想法相当暴力,就是先求出从1到m的异或和,如果等于m那就直接输出,否则就bfs从m到1与每个数进行异或运算,如果等于m就输出,否则就将其异或结果放进队列中,一直到那一串数。
当然还有其他更简单的方法,先放上代码。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <queue>
#define ll long long
using namespace std;
const int N = 1e4+10;int n,m,t;
int ans,vis[N];
int cnt,flag;
struct node {int sum,num;int book[N];
}s;void bfs(int ans) {queue<node>q;s.sum = ans;s.num = m;for(int i=1; i<=m; i++) {s.book[i] = 0;}q.push(s);while(!q.empty()) {node now = q.front();q.pop();for(int i=m; i>=1; i--) {int temp = now.sum^i;if(temp==m&&!now.book[i]) {now.book[i] = 1;now.num--;cout<<now.num<<endl;int ok=0;for(int i=1; i<=m; i++) {if(!now.book[i]) {if(!ok) {ok=1;cout<<i;}else cout<<' '<<i;}}cout<<endl;flag=1;break;}}if(flag) break;else {for(int i=m; i>=1; i--) {if(!now.book[i]) {now.sum = now.sum^i;now.book[i] = 1;now.num = now.num-1;q.push(now);}}}}
}int main() {scanf("%d",&t);while(t--) {ans=0;flag=0;scanf("%d",&m);for(int i=1; i<=m; i++) ans^=i;if(ans==m) {int ok=0;cout<<m<<endl;for(int i=1; i<=m; i++) {if(!ok) {ok=1;cout<<i;}else cout<<' '<<i;}cout<<endl;}else bfs(ans);}return 0;
}

来自某位大佬的更简洁的代码:

#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
typedef long long LL;
int a[10005];
void solve(int n) {int k = 0, j = 0, x, len, y;x = n ^ a[n];int ans = 0, t = 1;while (x) {if (x & 1) ans += t;t *= 2;x >>= 1;}x = -1;if (ans == 0)len = n;else {len = n - 1;x = ans;}cout << len << "\n";int flag = 1;for (int i = 1; i <= n; i++) {if (i == x)continue;else if (flag == 1) {cout << i;flag = 0;} elsecout << ' ' << i;}cout << '\n';
}
int main() {ios::sync_with_stdio(false);int t, n;a[1] = 1;for (int i = 2; i <= 1005; i++) {a[i] = a[i - 1] ^ i;}cin >> t;while (t--) {cin >> n;solve(n);}
}

A - Alchemy 101相关推荐

  1. 2021年2月4日组队赛补题

    A - Alchemy 101 (打表 + 规律) 通过打表发现从一开始一直往后异或会有规律.然后发现要取最长的,发现 (x - 3) % 4 = 3的时候从2开始异或是最长的(刚开始漏掉了从2开始的 ...

  2. Little Alchemy 游戏 - 扒答案。。 Java

    Little Alchemy 是个用四个基本元素组合生成的小游戏...连Excalibur都可以有 写的代码是从这个游戏的hint页面得到答案的 1 import java.io.*; 2 impor ...

  3. CF 1742C 题解 P8557 炼金术(Alchemy) 题解

    温馨提示:\color{#E74C3C}\text{温馨提示:}温馨提示: 遇见题解勿抄袭,棕名封号两行泪.\color{#E74C3C}\text{遇见题解勿抄袭,棕名封号两行泪.}遇见题解勿抄袭, ...

  4. 仙居机器人_【101巨喜讯】又一个全国冠军!仙居学子机器人全国赛获奖啦!

    原标题:[101巨喜讯]又一个全国冠军!仙居学子机器人全国赛获奖啦! 仙居私家车广播 美丽仙居,品质广播!欢迎关注仙居最具品质广播微信公众号! 特大喜讯 ! 浙江仙居城峰中学.仙居机器人协会7名学生 ...

  5. Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020

    Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020 时长:16h 55m |视频:. MP4 1280x720,30 fps(r) |音频:AAC ...

  6. 学习 Linux,101: 引导系统

    2019独角兽企业重金招聘Python工程师标准>>> 系列文章: http://www.ibm.com/developerworks/cn/views/linux/libraryv ...

  7. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  8. 二次开发photoshop_Photoshop 101:Web开发人员简介

    二次开发photoshop 介绍 (Introduction) Often, when working as web developer, we need to integrate templates ...

  9. Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误

    这篇是计算机类的优质预售推荐>>>><Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误> 编辑推荐 纠错式学习,从"陷阱 ...

  10. Python分析101位《创造营2020》小姐姐,谁才是你心中的颜值担当?

    来源 | CDA 数据分析师 责编 |  Carol Show me data,用数据说话. 今天我们聊一聊<创造营2020>各个小姐姐,点击下方视频,先睹为快: 最近可以追的综艺真是太多 ...

最新文章

  1. 智能哲学:“学习机器”与“机器学习” ——解读图灵思想中的人工智能
  2. vue 页面跳转的两种方式
  3. MongoDB数据库(2.MongoDB对数据库的操作以及Mongodb的增删改查)
  4. java 数据库操作教程_数据库基本操作:增删改查及联表操作
  5. 2021总结和2022展望
  6. 现在的钱真的那么容易挣了吗?
  7. 2017-2018-1 20155222 《信息安全系统设计基础》课上实验2、3
  8. cocos2dx lua 反编译(20170417增加补充说明)(转)
  9. 网站无脑搭建,自己可以建个站玩一玩儿
  10. springboot获取到的MySQL数据少了8小时
  11. 安卓adb push图片到相册后刷新相册(Mac版)
  12. CTF训练营学习笔记1(web)
  13. mysql可以存储拼音吗_MySQL汉字变换拼音(存储函数)
  14. unity3d音频系统
  15. QT实战-计算器-刘桂林-专题视频课程
  16. 怎样用C++制作汉诺塔
  17. java双人俄罗斯方块_双人版俄罗斯方块
  18. 平安好医生发布半年报,“关键先生”方蔚豪寻求变阵|看财报
  19. 人,确实有无限的潜力!
  20. r11线刷包注入root,oppor11st线刷包

热门文章

  1. 下家已定,陆奇重磅加盟拼多多,或正与腾讯暗度陈仓
  2. 【论文阅读】SMDP+代码复现
  3. python爬虫多线程实战:爬取美桌1080p壁纸图片
  4. Pat(Basic Level)Practice--1032(挖掘机技术哪家强)
  5. 小学计算机课程试讲,小学信息技术试讲教案
  6. 有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?----腾讯2016研发工程师在线模拟笔试题
  7. c6.0语言编译器不能运行怎么办,CodeBlocks无法编译的原因和解决办法
  8. matlab中的tic toc的用法
  9. 基于语音合成技术的全自动智能炒菜机、炒菜机器人方案推荐
  10. SSM药房管理系统 计算机毕设源码42430