#include <bits/stdc++.h>
using namespace std;
const int vmax = 5e5;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int m,n,f;
int rez = 0;
int last[vmax + 5];
long long mask[vmax + 5];
bool coprime(int x, int y)
{
if(!x)
{
return (y == 1);
}
if(!y)
{
return (x == 1);
}
if(x==1 && y==1)
{
return true;
}
if((mask[x] & mask[y]) != 0)
{
return false;
}
return (last[x] != last[y]);
}
void solve(int x, int y, int s, int dir)
{
for(int i=1;i<=s;i++)
{
int xx = x + i * dx[dir];
int yy = y + i * dy[dir];
rez += coprime(xx - 1,yy - 1);
}
x = x + s * dx[dir];
y = y + s * dy[dir];
if(s==1)
{
return;
}
for(int i=1;i<=s/2;i++)
{
int xs = x + i * dx[dir] + i * dx[(dir + 3) % 4];
int ys = y + i * dy[dir] + i * dy[(dir + 3) % 4];
rez += coprime(xs - 1,ys - 1);
}
solve(x + (s / 2) * dx[dir] + (s / 2) * dx[(dir + 3) % 4], y + (s / 2) * dy[dir] + (s / 2) * dy[(dir + 3) % 4], s / 2, dir);
solve(x + (s / 2) * dx[dir] + (s / 2) * dx[(dir + 3) % 4], y + (s / 2) * dy[dir] + (s / 2) * dy[(dir + 3) % 4], s / 2, (dir + 3) % 4);
for(int i=1;i<=s/2;i++)
{
int xd = x + i * dx[dir] + i * dx[(dir + 1) % 4];
int yd = y + i * dy[dir] + i * dy[(dir + 1) % 4];
rez += coprime(xd - 1,yd - 1);
}
solve(x + (s / 2) * dx[dir] + (s / 2) * dx[(dir + 1) % 4], y + (s / 2) * dy[dir] + (s / 2) * dy[(dir + 1) % 4], s / 2, dir);
solve(x + (s / 2) * dx[dir] + (s / 2) * dx[(dir + 1) % 4], y + (s / 2) * dy[dir] + (s / 2) * dy[(dir + 1) % 4], s / 2, (dir + 1) % 4);
}
void precalc()
{
for(int i=2;i<=vmax;i++)
{
if(!last[i])
{
for(int j=i;j<=vmax;j+=i)
{
last[j] = i;
}
}
}
int cnt = 0;
for(int i=2;i<=vmax;i++)
{
if(!mask[i])
{
for(int j=i;j<=vmax;j+=i)
{
mask[j] += (1LL<<cnt);
}
++cnt;
}
if(cnt > 62)
{
break;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
#ifdef home
freopen("nr.in","r",stdin);
freopen("nr.out","w",stdout);
#endif // home
cin>>m>>n>>f;
precalc();
for(int i=1;i<=f;i++)
{
int x,y,s;
cin>>x>>y>>s;
rez += coprime(x - 1,y - 1);
solve(x,y,s,0);
}
cout<<rez<<'\n';
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
13 ms |
6232 KB |
Output is correct |
2 |
Correct |
19 ms |
6236 KB |
Output is correct |
3 |
Correct |
269 ms |
6304 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
419 ms |
6480 KB |
Output is correct |
2 |
Correct |
426 ms |
6300 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
700 ms |
6480 KB |
Output is correct |
2 |
Correct |
707 ms |
6296 KB |
Output is correct |
3 |
Correct |
757 ms |
6296 KB |
Output is correct |
4 |
Correct |
772 ms |
6300 KB |
Output is correct |
5 |
Correct |
804 ms |
6304 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1416 ms |
6308 KB |
Output is correct |
2 |
Correct |
1502 ms |
6312 KB |
Output is correct |
3 |
Correct |
1589 ms |
6300 KB |
Output is correct |
4 |
Correct |
1669 ms |
6304 KB |
Output is correct |
5 |
Correct |
1756 ms |
6484 KB |
Output is correct |
6 |
Correct |
1839 ms |
6304 KB |
Output is correct |
7 |
Correct |
1920 ms |
6300 KB |
Output is correct |
8 |
Correct |
1923 ms |
6300 KB |
Output is correct |
9 |
Correct |
1933 ms |
6480 KB |
Output is correct |
10 |
Correct |
1921 ms |
6308 KB |
Output is correct |