首页 > 其他分享 >Numb 题解

Numb 题解

时间:2024-04-23 10:02:27浏览次数:29  
标签:include int 题解 top vis uint Numb now

前言

五一网课的例题,但是网上没有题解,所以来写一篇,就当攒 RP 了。题目可以在这里提交。原题是 Baekjoon - 19083,但是交不了?

题目简述

给你一个偶数 \(n\),求一个二进制数 \(x=\overline {a_1 a_2 \dots a_n}\),满足:

  1. \(x \equiv 0 \pmod{n}\);
  2. \(\forall i \in [1, n]\),\(\overline {a_1 a_2 \dots a_i} \bmod n\) 互不相同;
  3. 不含有前导 \(0\)。

题目分析

代码

#include <cstdio>
#include <cstring>
#pragma GCC target("avx", "sse2", "sse3", "sse4", "mmx")
typedef unsigned int uint;

uint t, n, m, top;

bool vis[3000001][2];
bool ans[6000001];

inline uint add(uint a, uint b){
	a += b;
	return a >= m ? a - m : a;
}

inline void dfs(uint now){
	if (!vis[now][1]){
		vis[now][1] = true;
		dfs(add(now, now + 1));
		ans[++top] = 1;
	}
	if (!vis[now][0]){
		vis[now][0] = true;
		dfs(add(now, now));
		ans[++top] = 0;
	}
}

inline void solve(){
	scanf("%ud", &n), m = n >> 1, memset(vis, 0, sizeof (bool) * (n)), top = 0, dfs(0);
	for (register int i = top; i; --i) putchar(ans[i] | 48);
	putchar('\n');
}

signed main(){
	for (scanf("%ud", &t); t--; solve());
	return 0;
}

checker.cpp

#include "testlib.h"
#include <vector>

signed main(int argc, char* argv[]) {
	registerTestlibCmd(argc, argv);

	int t = inf.readInt();

	while (t--) {
		int n = inf.readInt();
		std::vector<bool> vis(n, false);
		std::string str = ouf.readLine();
		
		if (int(str.length()) != n) quitf(_wa, "You're too long or too short!");

		for (int i = 1, now = 0; i <= n; ++i) {
			char ch = str[i - 1];
			
			if (ch != '0' && ch != '1') quitf(_wa, "Read '%c' not 0 or 1!", ch);
			
			if (i == 1 && ch == '0') quitf(_wa, "There mustn't be any leading zeros!");
			
			now = (now << 1 | (ch ^ 48)) % n;

			if (vis[now]) quitf(_wa, "Found %d again!", now);
			vis[now] = true;

			if (i == n && now != 0) quitf(_wa, "The number is not divisible by n!");
		}
	}

	ouf.readEof();

	quitf(_ok, "I love yzh!");

	return 0;
}

标签:include,int,题解,top,vis,uint,Numb,now
From: https://www.cnblogs.com/XuYueming/p/18152186

相关文章

  • CF1137F Matches Are Not a Child's Play 题解
    题目链接点击打开链接题目解法参考abruce的非\(lct\)的做法\(compare\)操作是搞笑的,可以转化成求\(u,v\)的\(when\)操作一个结论是编号最大的点一定是最晚删的,不妨令编号最大的点为根,则删除顺序一定是从下往上删的先考虑原树上单个点\(u\)的\(when\)怎么求令......
  • wps使用FileDialog(msoFileDialogFolderPicker)问题解决
    在vba里面使用了WithApplication.FileDialog(msoFileDialogFolderPicker),在excel里面多次测试均正常,但在wps里面运行时,发现只有打开文档后第一次运行宏是正确的,之后运行就再取不到选取的单元格,不管怎么选取,.SelectedItems.Count都是0。百度搜索为什么。 找到两个帖子1、 ......
  • 牛客小白月赛91 题解
    A.Bingbong的化学世界签到题意:给你苯环的结构,判断类型。思路:按照区别特判即可。代码:#include<bits/stdc++.h>usingnamespacestd;#definefffirst#definesssecond#definepbpush_back#defineall(u)u.begin(),u.end()#defineendl'\n'#definedebug(x)c......
  • EasyPoi 导出xlsx下拉列表过长问题解决
    问题描述:通过EasyPoi导出Excel带下拉框字段时,下拉框内值超过255时,会报错Stringliteralsinformulascan'tbebiggerthan255charactersASCII解决方案:额外创建sheet页去存储下拉框内数据,然后从这个sheet页中读取下拉框数据存到下拉列表中,最后需将额外创建的sheet隐藏......
  • Two Sided Cards 题解
    前言五一网课的例题,但是网上没有详细的题解(真的连题解都找不到啊),所以来写一篇,就当攒RP了。题目可以在这里提交。原题是TopCoder-10947,但是有了账号也交不了?题目简述有\(n\)张卡片,正面和反面分别组成了\(1\simn\)的排列。现在你需要将这\(n\)张卡片排成一排。卡片......
  • P1168 题解
    P1168中位数-洛谷很巧妙的一个题,自己没想出来。用一个「对顶堆」来维护,即一个大根堆和一个小根堆。保证大根堆的队首\(\le\)小根堆的队首,并使他们的堆中元素的个数尽量相等。操作如下:每次加入一个元素时,如果这个数比大根堆的队首大,就加入小根堆;否则加入大根堆。比较两......
  • P6492 题解
    P6492[COCI2010-2011#6]STEP-洛谷题目大意:维护一段01串,支持单点修改,每次修改后求最长的「\(\texttt{01010101}\dots\)」的长度。下文把「\(\texttt{01010101}\dots\)」称为「合法区间」,\(k\)为区间\([l,r]\)编号,\(lk,rk\)为\([l,r]\)左右子区间编号。考虑用线......
  • atcoder regular 176 (ARC176) A、B题解
     A很容易有一个错误想法,就是行从1~n,列从1~n拿,这样,第三个样例,最后,第7行,第7列,需要都增加两个数,但是(7,7)这个位置只能有一个数。我的做法是优先队列/set队列,每次选择行、列之中当前已经有的数目最少的(这样它们最需要添加),这样能保证,行列需要添加的,不会出现只能选择多个行列一样的......
  • P1637 题解
    一道绿写2.5h,我是什么效率哥。Solution提供一种不使用线段树/树状数组的方法。前置知识:分治,二分,前缀和。考虑分治。我们假设有一个分治函数solve(l,r)可以统计区间\([l,r]\)中的thair。对于一个区间\([l,r]\)中的thair\(=\{a_i,a_j,a_k|i<j<k\) 且\(a_......
  • P8207 [THUPC2022 初赛] 最小公倍树 题解
    题目大意有编号为\([L,R]\)区间的点,连接两个点\(x,y\)边权的为\(LCM(x,y)\),求这张图的最小生成树。\[1\leqL\leqR\leq10^6,R-L\leq10^5\]解题思路我们有一个结论:对于张图\(G\)中的一个生成子图\(E\),\(E\)之中的一条边\(k\)如果不在\(E\)最小生成树中,那么\(......