吐了,三个测试点TLE过不去
1995

对数据大于一万的就筛到该数的平方根

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdbool.h>
#include <stdio.h>
#include<math.h>

#define LL long long
#define IN freopen("in.txt", "r", stdin)
#define OUT freopen("out.txt", "w", stdout)
#define scan(x) scanf("%d", &x)
#define sqr(x) (x) * (x)
#define f(i, a, b) for (int i = a; i <= b; i++)
#define pn(x) printf("%d\n", x)
#define pr1(x) printf("Case %d: ", x)
#define pn1(x) printf("Case %d:\n", x)
#define pr2(x) printf("Case #%d: ", x)
#define pn2(x) printf("Case #%d:\n", x)
#define lowbit(x) (x & (-x))
#define MAXN 200000001

int prime[10000000];
bool vis[MAXN];
int cnt = 0;
void Euler_prime(int n)
{
vis[1] = 1;
for (int i = 2; i <= n; ++i)
{
if (!vis[i])
prime[cnt++] = i;
for (int j = 0; j < cnt; ++j)
{
if (i * prime[j] > n) //判断是否越界
break;
vis[i * prime[j]] = 1; //筛数
if (i % prime[j] == 0)
break;
}
}
}

int main()
{
int n,x;
scan(n);
if(n>10000){
x = (int)sqrt(n);
}
else
x = n;
Euler_prime(x);
f(i, 0, cnt)
{
if (n % prime[i] == 0)
{
printf("%d", n/prime[i]);
return 0;
}
}
return 0;
}

本腊鸡没什么想法,一开始想构建个二维数组淦,但题目给的数据是,爆掉了

于是换个思路:构建两个二维数组分别记录操作及该操作的序号,对查询进行从后搜索


Description

转眼间,奥运走向了尾声。QWQ要策划一场闭幕式演出。

QWQ策划的是一个方阵表演。在表演中,运动员们将排成一个 的方阵,做出各种各样的动作。

方便起见,本题中我们用正整数来指代各种动作。初始时,运动员们都没有动作,记为动作。接下来会发生次事件:

  • QWQ选取方阵的一行 / 一列,并让这一行 / 这一列的运动员们统一做出某个动作;

  • QWQ想知道,现在位于第 行第 列的选手做的是什么动作。

QWQ还忙着其他工作。你能帮帮他,回答他的问题吗?

Input

第一行两个正整数 分别表示需要维护的矩阵的大小和操作的数量。

接下来 行,每行首先是一个字符 ,表示操作的类型。 的取值及对应的意义如下:

  • :这一行接下来两个整数 表示第 行的运动员全部做出 动作。

  • :这一行接下来两个整数 表示第 列的运动员全部做出 动作。

  • :这一行接下来两个整数 你需要回答第行第 列的运动员做了什么动作。

    Output

    对于每组询问输出一个整数表示答案。
阅读全文 »

Description

QwQ非常喜欢玩部落冲突,但他从来不升级城墙,所以他的城墙开始时全都是1级的。

一天QwQ心血来潮,他先把他的个城墙排成一排,然后在脑中构思好每个城墙要被升到几级。

然而QwQ发现给每个城墙升到他想要的等级,不多升也不少升并不是一件容易的事,因为部落冲突只支持每次将一段城墙升高一级。

形式化地说,你的每次操作只能选择一对满足,然后将第到第块城墙各升高一级。

由于QwQ比较懒,他需要最小化操作的次数,把墙刷到他想要的等级。(具体输出方式见输出格式)

与真实游戏不同的是,你不能调换城墙的顺序。

阅读全文 »
0%