求助正确性
查看原帖
求助正确性
1031575
CompileEasily楼主2024/5/25 11:44

rt,思路是处理出所有的数据点,然后贪心每次找最近的点,WA on #44

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e4 + 5;
int xz,yz,ax,ay,bx,by;
int xs,ys,t;
int ans = 0;
int cnt = 0;
struct node{
	int x;
	int y;
	bool vis = 0;
}node[N];
struct node1{
	int x;
	int y;
	int num;
	int id;
};
inline void read(int &x)
{
	x = 0;
	int f = 1;   
	char ch = getchar();
	while(!isdigit(ch)){if(ch == '-') f = -f;ch = getchar();}
	while(isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48),ch = getchar();
	x *= f;
}
inline void write(int x)
{
	if(x < 0) x = -x,putchar('-');
	int sta[35],top = 0;
	do
	{
		sta[++top] = x % 10,x /= 10;
	}while(x);
	while(top) putchar(sta[top--] ^ 48);
}
inline int Abs(int x)
{
	return x > 0 ? x : -x;
}
inline int cal(int x,int y,int gx,int gy){
	return Abs(x - gx) + Abs(y - gy);
}
signed main()
{
	read(xz),read(yz),read(ax),read(ay),read(bx),read(by);
	read(xs),read(ys),read(t);
	for(int x = xz,y = yz;x <= 1e17 && y <= 1e17;x = ax * x + bx,y = ay * y + by) node[++cnt].x = x,node[cnt].y = y,node[cnt].vis = 0;
	int x = xs,y = ys;
	while(t > 0)
	{
		node1 minn = {0,0,(long long)1e18,0};
		for(int i = 1;i <= cnt;i++)
		{
			if(node[i].vis) continue;
			if(minn.num > cal(x,y,node[i].x,node[i].y)) minn.num = cal(x,y,node[i].x,node[i].y),minn.x = node[i].x,minn.y = node[i].y,minn.id = i;
		}
		if(t < minn.num) break;
		x = minn.x;y = minn.y;t -= minn.num;ans++;node[minn.id].vis = 1;
	}
	write(ans);
}

2024/5/25 11:44
加载中...