1004 智能车
Description
看是否存在若干中方案使得 \(p_{x_{1}}+p_{x_{2}}+p_{x_{3}}+\dots=c\) ##
Input 一共 \(T\)
组数据,对于每一组数据: \(\boxed{\begin{array}&n&c\\p_{1}&p_{2}&p_{3}&\dots&p_{n}\end{array}}\)
数据范围: - \(1\leq T\leq 10\) - \(1\leq n\leq 5\times 10^4\) - \(1\leq c\leq 500\) - \(1\leq p_{i}\leq c\) ## Output
找出一个方案满足最大值和最小值相差最小,求出最小的差值。如果不存在满足条件的方案,输出−1。
## Sample Input 1
2
31
4 10
3 7 2 51
3
Sample Input
1 | 1 |
Sample Output
1
7
1009 序列
求 \(\sum\limits_{l=1}^n\sum\limits_{r=l}^n(a_{l}\oplus
a_{l+1}\oplus\dots \oplus a_{r})\times \min_{l\leq i\leq
r}a_{i}\) 对 \(998244353\)
取模的值。 输入 \(\boxed{\begin{array}&T\\n\\a_{1}&a_{2}&a_{3}&\dots&a_{n}\end{array}}\)
输出答案 输入样例 1
2
3
4
52
3
2 3 4
5
5 12 18 8 171
262
22191
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
using namespace std;
void solve()
{
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
long long ans = 0;
for (int l = 0; l < n; l++)
{
int prefixXOR = 0;
int minVal = a[l];
for (int r = l; r < n; r++)
{
prefixXOR ^= a[r];
minVal = min(minVal, a[r]);
ans = (ans + (prefixXOR * minVal) % MOD) % MOD;
}
}
cout << ans << endl;
}
int main()
{
int _;
cin >> _;
while(_--)
solve();
}
1003
![[../../../../images/Z-attachment/Pasted image 20231230174217.png]]
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
using namespace std;
int dfs(int node, int k, vector<vector<int>> &graph, vector<int> &evilValue, vector<vector<int>> &dp)
{
if (dp[node][k] != -1)
return dp[node][k];
int result = (evilValue[node] <= k);
for (int neighbor : graph[node])
if (k >= evilValue[node])
result = (result + dfs(neighbor, k / evilValue[node], graph, evilValue, dp)) % MOD;
dp[node][k] = result;
return result;
}
int main()
{
int T;
cin >> T;
while (T--)
{
int n, m, k;
cin >> n >> m >> k;
vector<int> evilValue(n);
for (int i = 0; i < n; i++)
cin >> evilValue[i];
vector<vector<int>> graph(n);
for (int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
graph[u - 1].push_back(v - 1);
}
vector<vector<int>> dp(n, vector<int>(k + 1, -1));
int totalPaths = 0;
for (int i = 0; i < n; i++)
totalPaths = (totalPaths + dfs(i, k, graph, evilValue, dp)) % MOD;
cout << totalPaths << endl;
}
}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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using namespace std;
const int MAXN = 1005;
const int MAXK = 6;
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};
struct State
{
int x, y, t;
};
char grid[MAXK][MAXN][MAXN];
bool visited[MAXK][MAXN][MAXN];
int main()
{
int T;
cin >> T;
while (T--)
{
memset(visited, 0, sizeof(visited));
int n, m, k;
cin >> n >> m >> k;
for (int i = 0; i < k; i++)
{
for (int j = 0; j < n; j++)
{
for (int l = 0; l < m; l++)
{
cin >> grid[i][j][l];
}
}
}
int h, ex, ey;
cin >> h >> ex >> ey;
queue<State> q;
q.push({n, m, 0});
visited[0][n][m] = true;
while (!q.empty())
{
State cur = q.front();
q.pop();
if (cur.x == ex && cur.y == ey)
{
cout << cur.t << endl;
break;
}
for (int i = 0; i < 4; i++)
{
int nx = cur.x + dx[i];
int ny = cur.y + dy[i];
if (nx < 1 || nx > n || ny < 1 || ny > m)
continue;
if (grid[(cur.t + 1) % k][nx][ny] == '*')
continue;
for (int j = 0; j <= h; j++)
{
int tx = nx - j;
if (tx <= 0)
break;
if (grid[(cur.t + 1) % k][tx][ny] == '*')
break;
if (visited[(cur.t + 1) % k][tx][ny])
continue;
visited[(cur.t + 1) % k][tx][ny] = true;
q.push({tx, ny, cur.t + 1});
}
}
}
}
}
1005
![[../../../../images/Z-attachment/Pasted image 20231230174109.png]]
1 |
|
1006
![[../../../../images/Z-attachment/Pasted image 20231230174412.png]]
1002
![[../../../../images/Z-attachment/Pasted image 20231230174703.png]]