A 被封印的黑白熊

开 数组 / 结构体数组 记录一下,然后倒着判断点是否在范围内即可

B 时间管理大师wulong

数据范围较小,可以直接暴力跑,每询问一次就跑一边记住的M个

或者用标记+今天上午讲的队列(有兴趣的试一试)

C 圈圈又菜又爱玩

数据范围较小,同样可以直接暴力跑,while循环+标记跑100 * 100不是问题

D 小a跳圈圈

可以直接跑n次看每一个有没有都踩到 或者找规律,只有n是2的任意次方能yes

E yq和咩咩的博弈游戏

此题因为数据量过大,在1e7的范围内需要进行最多2e5次判断,所以此题我们需要进行预处理,仿照素数筛筛出一定范围内所有条件的数,但接下来查找量也很大,并且我们筛剩下的数是按顺序排的,所以我们只需要将之前筛剩下来的数放进一个新的数组,就可以进行二分查找,加快查找速率

(by 小萍萍友情提供)

//标程
#include <bits/stdc++.h>
using namespace std;

const int M = 1e7+1000;
bool q[M];
int num[M],n,cnt;

int check(int x)//判断是否含7
{
	while(x)
	{
		if(x%10==7) return 1;
		x /= 10;
	}
	return 0;
}

void init()
{
	for(int i=1;i<=M-10;i++) {//-10无所谓,少点时间
		if(q[i]==0&&check(i)) {//未标记且非目标
			for(int j=i;j<=M-10;j+=i) q[j] = 1;//非目标及其倍数标记
		} 
	}
	for(int i=1;i<=M-10;i++) if(q[i]==0) num[++cnt] = i;//将目标数放入新数组
}

void solve()
{
	scanf("%d",&n);
	if(q[n]) {//输入的数本身不合法
		cout<<(-1)<<endl;
		return ;
	}
	int l = 1,r = cnt;
	while(l<r) {//二分板子
		int mid = (l+r)/2;
		if(num[mid]>n) r = mid;
		else l = mid+1;
	}

	printf("%d\n",num[l]);

}

int main() 
{
	int T = 1;
	init();
	cin>>T;
	while(T--)
	{
		solve();
	}
    return 0;
}

nylg赢麻了,xqh输麻了

异或符号是 ^ 这个,好在全写出来了,不然我就麻了

刘桑のSakura(emo版)

遍历遇到emo直接跳过就行

刘桑のSakura(快速版)

纯快速幂板子,没写出来好好理解一下快速幂怎么实现的

long long qpow(long long a,long long b,long long mod)
{
    a=a%mod;//防止a过大
    long long res=1;
    while(b){
	    if(b&1) res=res*a%mod;
		a=a*a%mod;
        b>>=1;//右移相当于/2
    }
    return res;
}

0 条评论

目前还没有评论...