给定一个元素互不相同的数组\(c\)和 \(a,b\),找到 \(i\)使得 \(c_i = a + b\)
直接for循环寻找即可。
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, a, b;
cin >> n >> a >> b;
for(int i = 0; i < n; ++ i){
int c;
cin >> c;
if (c == a + b){
cout << i + 1 << '\n';
return 0;
}
}
return 0;
}
给定两个矩阵\(A,B\),问能否对 \(A\)进行若干次变换操作得到 \(B\)。
变换分两种,一种是将第一列放到最后一列,另一种是将第一行放到最后一行。
范围不大,直接枚举所有变换操作判断即可。
如果我们将左右连通,上下连通,那么变换操作实际上不改变每个点的上下左右点。即变换操作可以看成将矩形左上角的点移动。
时间复杂度为\(O(H^2W^2)\)
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int h, w;
cin >> h >> w;
vector<string> a(h), b(h);
for(auto &i : a){
cin >> i;
}
for(auto &i : b){
cin >> i;
}
auto equal = [&](int x, int y){
for(int i = 0; i < h; ++ i)
for(int j = 0; j < w; ++ j){
int X = (x + i) % h;
int Y = (y + j) % w;
if (a[X][Y] != b[i][j]){
return false;
}
}
return true;
};
auto check = [&](){
for(int i = 0; i < h; ++ i)
for(int j = 0; j < w; ++ j)
if (equal(i, j))
return true;
return false;
};
if (check()){
cout << "Yes" << '\n';
}
else
cout << "No" << '\n';
return 0;
}
给定一个包含.#的矩形,问由#组成的形如X的最长长度,每个长度的数量。
范围不大,枚举X的位置和大小判断即可。
时间复杂度为\(O(HW\min(HW))\)
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int h, w;
cin >> h >> w;
vector<string> s(h);
for(auto &i : s)
cin >> i;
int sz = min(h, w);
vector<int> ans(sz + 1);
auto check = [&](int x, int y){
if (s[x][y] != '#')
return 0;
for(int i = 0; i <= sz; ++ i){
for(int dx = -1; dx <= 1; dx += 2)
for(int dy = -1; dy <= 1; dy += 2){
int nx = x + i * dx, ny = y + i * dy;
if (nx >= h || nx < 0 || ny < 0 || ny >= w)
return i - 1;
if (s[nx][ny] != '#')
return i - 1;
}
}
return sz;
};
for(int i = 0; i < h; ++ i)
for(int j = 0; j < w; ++ j)
ans[check(i, j)] ++;
for(int i = 1; i <= sz; ++ i)
cout << ans[i] << " \n"[i == sz];
return 0;
}
问\(1 \sim n\)中能表示成 \(a^2 \times b \times c^2(a < b < c)\)且 \(a,b,c\)为质数的数的个数。
由于\(n \leq 10^{12}\),预处理\(1 \to 10^6\)的质数,然后枚举\(c\)和 \(a\),计算得到乘积小于等于 \(n\)的最大的 \(b\),此时符合条件的数量就是 \(1 \sim b\)中的质数个数,这个事先预处理即可。
时间复杂度是 \(O(\sqrt{n} \log n)\)
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
#define FOR(i, x, y) for (decay<decltype(y)>::type i = (x), _##i = (y); i < _##i; ++i)
#define FORD(i, x, y) for (decay<decltype(x)>::type i = (x), _##i = (y); i > _##i; --i)
const LL p_max = 1E6 + 100;
LL pr[p_max], p_sz;
int cnt[p_max];
void get_prime() {
static bool vis[p_max];
FOR (i, 2, p_max) {
if (!vis[i]) {
pr[p_sz++] = i;
cnt[i] = 1;
}
FOR (j, 0, p_sz) {
if (pr[j] * i >= p_max) break;
vis[pr[j] * i] = 1;
if (i % pr[j] == 0) break;
}
}
FOR(i, 2, p_max)
cnt[i] += cnt[i - 1];
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
LL n;
cin >> n;
LL ans = 0;
get_prime();
for(int i = 0; i < p_sz; ++ i){
for(int j = 0; j < i; ++ j){
LL sum = 1ll * pr[i] * pr[i] * pr[j] * pr[j];
if (sum > n)
break;
LL maxb = min(n / sum, pr[i] - 1);
if (maxb <= pr[j])
break;
ans += cnt[maxb] - cnt[pr[j]];
}
}
cout << ans << '\n';
return 0;
}
六面骰子,每面等概率出现。
现在不断掷骰子,直到掷出来的数的乘积大于等于\(N\)。
问恰好为 \(N\)的概率。对 \(998244353\)取模。
显然\(n\)的质因数只能有 \(2,3,5\)。
设\(dp[n]\)表示最终是 \(n\)的概率,根据定义, \(dp[n] = \frac{1}{6}dp[\frac{n}{1}] + \frac{1}{6}dp[\frac{n}{2}] + \frac{1}{6}dp[\frac{n}{3}] + \frac{1}{6}dp[\frac{n}{4}] + \frac{1}{6}dp[\frac{n}{5}] + \frac{1}{6}dp[\frac{n}{6}]\),即掷出\(n\)的概率,应当是先掷出 \(\frac{n}{1}\) ,然后再以\(\frac{1}{6}\)的概率掷出 \(1\),或者先掷出 \(\frac{n}{2}\) ,然后再以\(\frac{1}{6}\)的概率掷出 \(2\),依次类推。
当然,如果不整除就没有这部分的概率贡献。
化简一下就是\(dp[n] = \frac{1}{5}dp[\frac{n}{2}] + \frac{1}{5}dp[\frac{n}{3}] + \frac{1}{5}dp[\frac{n}{4}] + \frac{1}{5}dp[\frac{n}{5}] + \frac{1}{5}dp[\frac{n}{6}]\)
因为每次转移状态大小都会除以一个数,所以最终的状态数量应该不会超过\(O(n \log n)\),写个记忆化就可以了。
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int mo = 998244353;
long long qpower(long long a, long long b){
long long qwq = 1;
while(b){
if (b & 1)
qwq = qwq * a % mo;
a = a * a % mo;
b >>= 1;
}
return qwq;
}
long long inv(long long x){
return qpower(x, mo - 2);
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
LL n, ba;
cin >> n;
ba = n;
int cnt2 = 0, cnt3 = 0, cnt5 = 0;
while (n % 2 == 0){
++ cnt2;
n /= 2;
}
while (n % 3 == 0){
++ cnt3;
n /= 3;
}
while (n % 5 == 0){
++ cnt5;
n /= 5;
}
if (n != 1)
cout << 0 << '\n';
else{
map<LL, int> cache;
LL inv5 = inv(5);
function<LL(LL)> dfs = [&](LL n){
if (n == 1)
return 1;
if (cache.find(n) != cache.end())
return cache[n];
LL ans = 0;
for(int i = 2; i <= 6; ++ i)
if (n % i == 0){
ans = (ans + dfs(n / i));
if (ans >= mo)
ans -= mo;
}
cache[n] = ans * inv5 % mo;
return cache[n];
};
cout << dfs(ba) << '\n';
}
return 0;
}
给定一个包含xo的字符串\(t\),它由一个长度为\(n\)的串\(s\)重复 \(m\)次拼接得到。要求将恰好 \(k\)个 x变成o,问连续o的最大长度。
把x的位置都记录下来,容易发现我们进行变换的x肯定是一组连续的x。
我们枚举进行变化的第一个x,然后找到之后的第 \(k\)个 x,之间的长度取个最大值即可。
虽然这个x有\(nm = 10^{14}\)个,但由于串是重复拼接得到的,第二部分的串的 x实际上跟第一个串的情况一致(并且不会更优),因此我们只需要枚举第一个串x和第二个串的第一个x(注意这个情况,会利用第一个串最后一个x和第二个串的第一个x之间的o,可能从第一个串的第一个x更优)。
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, m;
LL k;
cin >> n >> m >> k;
string s;
cin >> s;
vector<int> pos;
LL cnt = 0;
for(int i = 0; i < n; ++ i){
cnt += (s[i] == 'x');
if (s[i] == 'x')
pos.push_back(i);
}
LL ans = 0;
LL la = -1;
auto solve = [&](int st){
LL left = pos.size() - st;
LL minn = min(left, k);
left = k - minn;
if (left == 0){
if (st + k == pos.size()){
return 1ll * n + pos[0] * (m > 1);
}else {
return 1ll * pos[st + k];
}
}
LL shift = left / cnt + 1;
LL remain = left % cnt;
if (remain == 0 && shift == m){
return shift * n;
}else if (shift > m || shift == m && remain > 0)
return 0ll;
else{
return shift * n + pos[remain];
}
};
for(int i = 0; i < pos.size(); ++ i){
LL r = solve(i);
ans = max(ans, r - la - 1);
la = pos[i];
}
if (m > 1){
m -= 1;
LL r = solve(0);
ans = max(ans, n + r - pos.back() - 1);
}
cout << ans << '\n';
return 0;
}
求第\(k\)个 x可能有些情况要讨论,官方题解采用的二分法就可以以\(\log\)的代价避免这个讨论。
且x的数量和串\(s\)的长度是同一个数量级,我们也可以枚举答案的左端点,然后二分找到恰好包含\(k\)个x的最右端点,长度取个最大值。
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const LL inf = 1e18;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, m;
LL k;
cin >> n >> m >> k;
string s;
cin >> s;
vector<int> sum(n);
LL cnt = 0;
for(int i = 0; i < n; ++ i){
if (s[i] == 'x'){
sum[i] = 1;
}
}
partial_sum(sum.begin(), sum.end(), sum.begin());
LL ans = 0;
LL la = -1;
auto count = [&](LL pos){
LL shift = pos / n, remain = pos % n;
return shift * sum.back() + sum[remain] * (shift != m);
};
auto solve = [&](int st){
LL l = st, r = 1ll * n * m;
LL down = st == 0 ? 0 : sum[st - 1];
while(l + 1 < r){
LL mid = (l + r) >> 1;
if (count(mid) - down <= k)
l = mid;
else
r = mid;
};
return r;
};
for(int i = 0; i < n; ++ i){
LL r = solve(i);
ans = max(ans, r - i);
}
cout << ans << '\n';
return 0;
}
<++>
<++>
<++>
<++>
我正在尝试使用flexbox制作“我自己的框架”。flexbox最头疼的是排奇数个元素:3,5,7。所以想用js/jq解决。例如,如果元素的宽度为300px或更小-元素变为宽度的100%。我正在使用jq代码:functioncheck(){varwindow=$(document).outerWidth();varwidth=$('.one-third').outerWidth();if(width但问题是当函数根据CSS规则将元素的宽度设置为100%时,脚本根据其IF语句重新计算并且元素开始闪烁。谁能帮我解决这个问题?代码片段。functioncheck(){varwindow=$(
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我通过使用jQuery学习了Ajax。我认为jQuery实现使用状态代码,但不太了解状态代码,如200、404和300。使用jQueryAjax,其简单如下:$.ajax({url:"update.php",type:"POST",data:customObj}).done(function(data){alert("datasavedsuccesfully");}).fail(function(data
我正在生成一个接近300MB的巨大LMDB文件,它在Golang中需要几个小时。有没有办法在几分钟内生成它?我愿意使用任何其他语言。 最佳答案 如果您在每次写入后提交事务,请避免它。完成所有写入后提交事务。 关于go-生成大(~300MB)LMDB文件,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/39648124/
任何人都知道如何避免Windows7有时暂停300-600毫秒,甚至卡住SystemTime和MultimediaTimer(因此,如果您测量此暂停前后的时间,它测量的时间为0毫秒,而PerformanceCounter实际上确实正确地测量了此暂停。CPU负载相当低(10%)。系统使用新的MLCSSD。这些是否仍然存在卡顿问题?我通过测量以每秒6帧的速度捕捉的相机的时间戳发现了这种行为。我记录了图像进入的时间,并查看抓取日志,图像之间的时间很好,直到我警告它们之间的时间是否太快20%和太慢20%。然后我有时(每小时一次,有时仅在4小时后)收到300-600毫秒的警告。接下来是一些“太快
介绍NVISTAR的二维DTOF激光雷达ROC300在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)下测试ROS1驱动和ROS2的驱动,打开使用RVIZ查看点云数据,本文的前提条件是你的TX1里已经安装了ROS1版本:Melodic,ROS2版本:eloquent。 大家好,我是虎哥,从厂家那申请到了不止科技NVISTARROC300雷达样品,其实有一段时间了,周末花点功夫,测试接入试用一下。这一次我也第一次尝试用ROS2eloquent环境测试激光雷达,由于自己也不是很熟悉,边学边测试,这里也是总结一下自己的简单测试经验,分
我在RAID5(4x7.2k@3TB)系统上有一些2TB只读(创建后不可写入)文件。现在我有一些线程想要读取该文件的部分内容。每个线程都有一个它需要的block数组。每个block都由要读取的文件偏移量(位置)和大小(通常约为300字节)寻址。读取这些数据最快的方法是什么。我不关心CPU周期,(磁盘)延迟才是最重要的。因此,如果可能的话,我想利用硬盘的NCQ。由于文件是高度压缩的并且会随机访问,而且我知道确切的位置,所以我没有其他方法可以优化它。我应该将文件读取集中到一个线程吗?我应该让文件保持打开状态吗?如果每个线程(可能大约30个)都同时打开每个文件,那么(来自网络服务器的)新线程
查找第300行的长度*慢首先,我已阅读WhyismyWebAssemblyfunctionslowerthantheJavaScriptequivalent?的答案但这并没有说明问题,而且我已经投入了大量时间,这很可能是靠墙的黄色东西。我不使用全局变量,我不使用任何内存。我有两个简单的函数,它们可以找到线段的长度,并将它们与普通旧Javascript中的相同内容进行比较。我有4个参数3个本地人,并返回一个浮点数或double数。在Chrome上,Javascript比webAssembly快40倍,在Firefox上,wasm几乎比Javascript慢300倍。jsPref测试用例。
专栏地址:『youcans的OpenCV例程300篇-总目录』01.图像的读取(cv2.imread)02.图像的保存(cv2.imwrite)03.图像的显示(cv2.imshow)04.用matplotlib显示图像(plt.imshow)【OpenCV例程300篇】02.图像的保存(cv2.imwrite)函数cv2.imwrite()用于将图像保存到指定的文件。函数说明:retval=cv2.imwrite(filename,img[,paras])cv2.imwrite()将OpenCV图像保存到指定的文件。cv2.imwrite()基于保存文件的扩展名选择保存图像的格式。cv2.i
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我们需要您帮助解决一个PHP项目客户端限制问题。他想从服务器上下载完整的安全视频,他希望视频存储在公共(public)目录之外,视频流必须是HTML5,没有Flash。我有一个解决方案,在php缓冲区中加载视频并响应它更改标题信息,但是视频大小,或多或少300MB无法在PHP缓冲区中加载...有什么好主意吗?
我怎样才能得到所有的带有width>=300?我的标记/代码:$images=...END;我的尝试:preg_match_all("//",$images,$matches);print_r($matches); 最佳答案 为此使用正则表达式不是一个好主意。这适用于您的特定示例,但它有许多问题,因为正则表达式无法正确解析HTML:"/]*width=\"([3-9][0-9]{2}|[1-9][0-9]{3,})\"[^>]*>/"在线查看它:ideone我建议您改用HTML解析器。相关RobustandMatureHTMLPar