洛谷刷题6.16

博主只是记录一下自己的刷题历程,代码中还有很多不规范的地方,也没注释,没什么学习意义。

P1080国王游戏

先排序后高精度,本人对高精度题极度反感

#include
#define ll long long
using namespace std;
struct person{
	int a,b;
}arr[10005];
bool cmp(person &s1,person &s2){
	return s1.a*s1.b=0;i--){
		temp[i]=num[i];
	}
	memset(chu,0,sizeof(chu));
	for(int i=5000;i>0;i--){
		chu[i]=temp[i]/y;
		temp[i-1]+=(temp[i]%y)*10;
	}
	chu[0]=temp[0]/y;
	bool flag=false;
	for(int i=5000;i>=0;i--){
		if(ans[i]=0;i--){
			ans[i]=chu[i];
		}
	}
	for(int i=0;i<5000;i++){
		num[i]*=x;
	}
	for(int i=0;i<5000;i++){
		if(num[i]>9) num[i+1]+=num[i]/10;
		num[i]=num[i]%10;
	}
}
int main()
{
cin>>n;
cin>>num[0]>>startb;
for(int i=1;i<=n;i++){
	cin>>arr[i].a>>arr[i].b;
}	
sort(arr+1,arr+1+n,cmp);
for(int i=1;i<=n;i++){
	insert(arr[i].a,arr[i].b);
}
int i=5000;
while(ans[i]==0&&i!=0){
	i--;
}
while(i>=0){
	cout<

P4552 IncDec Sequence

差分思维题

#include
#define ll long long
using namespace std;
ll n,a,b,arr[100005],zheng,fu; 
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
	cin>>a;
	arr[i]=a-b;
	b=a;
}
for(int i=2;i<=n;i++){
	if(arr[i]>0) zheng+=arr[i];
	else if(arr[i]<0) fu-=arr[i];
}
cout<

P1378 油滴扩展

用next_permutation()函数枚举所有全排列,暴力枚举

#include
#define ll long long
using namespace std;
int n,a,b,c,d,heng[10],zong[10],arr[10],ans=0x3f3f3f; 
double r[10];
void suan(){
	for(int i=1;i<=n;i++){
		r[i]=0;
	}
	double temp=abs(a-c)*abs(b-d);
	for(int i=1;i<=n;i++){
		int num=arr[i];
		r[num]=min(min(abs(heng[num]-a),abs(heng[num]-c)),min(abs(zong[num]-b),abs(zong[num]-d)));
		for(int j=1;j>n>>a>>b>>c>>d;
for(int i=1;i<=n;i++){
	cin>>heng[i]>>zong[i];
	arr[i]=i;
}
do{
	suan();
}while(next_permutation(arr+1,arr+1+n));
cout<

P1126 机器人搬重物

广搜,就是有很多走法,整体思维量不大

#include
#define ll long long
using namespace std;
struct point{
	int x,y,flag;
};
int n,m,arr[51][51],a,b,c,d,e,vis[51][51][4];
char ch;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0}; 
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
	for(int j=1;j<=m;j++){
		cin>>arr[i][j];
	}
}
cin>>a>>b>>c>>d>>ch;
if(ch=='E') e=0;
if(ch=='S') e=1;
if(ch=='W') e=2;
if(ch=='N') e=3;
vis[a][b][e]=1;
queuer;
r.push(point{a,b,e});
while(!r.empty()){
	int x=r.front().x,y=r.front().y,flag=r.front().flag;
	r.pop();
	if(x==c&&y==d){
		int ans=0x3f;
		for(int i=0;i<4;i++){
			if(vis[x][y][i]!=0){
				cout<=1&&x+dx[flag]=1&&y+dy[flag]=1&&x+2*dx[flag]=1&&y+2*dy[flag]=1&&x+3*dx[flag]=1&&y+3*dy[flag]

等暑假参加集训应该会天天更新

你可能感兴趣的:(刷题记录,算法,数据结构,排序算法,c++)