求助4道黄(每题都悬关
  • 板块学术版
  • 楼主__ycy1124__
  • 当前回复17
  • 已保存回复17
  • 发布时间2024/7/25 16:03
  • 上次更新2024/7/25 16:51:03
查看原帖
求助4道黄(每题都悬关
1287433
__ycy1124__楼主2024/7/25 16:03

P1141 70ptsTLE

#include<bits/stdc++.h>
using namespace std;
char a[2001][2001];
bool vis[2001][2001];
queue <int> x,y;
int p1[4]={1,-1,0,0},p2[4]={0,0,1,-1};
int n,m;
void bfs(int x1,int y1)
{
	
	for(int i=0;i<=3;i++)
	{
		if(x1+p1[i]>0&&x1+p1[i]<=n&&y1+p2[i]>0&&y1+p2[i]<=n&&!vis[x1+p1[i]][y1+p2[i]])
		{
			if(a[x1+p1[i]][y1+p2[i]]!=a[x1][y1])
			{
				x.push(x1+p1[i]);
				y.push(y1+p2[i]);
				vis[x1 + p1[i]][y1+p2[i]]=1;//就这里
			}
		 }
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
//			a[i][j]=getchar();
			cin >> a[i][j];
		}
//		getchar();
	}
	for(int i=1;i<=m;i++)
	{
		memset(vis,0,sizeof(vis));
		int x1,y1;
		cin>>x1>>y1;
		vis[x1][y1]=1;
		x.push(x1);
		y.push(y1);
		int js=0;
		while(!x.empty())
		{
			js++;
			bfs(x.front(),y.front());
// 			cout << x.front() <<' '<<y.front()<<endl;
			x.pop();
			y.pop();
		}
		cout<<js<<'\n';
	}
	return 0;
}

P1020 100pts WA

#include<bits/stdc++.h>
using namespace std;
int p1[100001],p2[100001];
int a[100001];
int n,tot=0;
int work1(int x){
	int l=0,r=tot,ans=1;
	while(l<=r){
		int mid=l+r>>1;
		if(a[mid]<=x){
			r=mid-1;
			ans=mid;
		}
		else{
			l=mid+1;
			ans=mid+1;
		}
	}
	return ans;
}
int work(int x){
	int l=0,r=tot,ans=1;
	while(l<=r){
		int mid=l+r>>1;
		if(a[mid]>=x){
			r=mid-1;
			ans=mid;
		}
		else{
			l=mid+1;
			ans=mid+1;
		}
	}
	return ans;
}
int main(){
	int n=0;
	while(cin>>p1[++n]);
	for(int i=1;i<=n;i++){
		if(p1[i]<=a[tot]){
			a[++tot]=p1[i];
		}
		else{
			a[work1(p1[i])]=p1[i];
		}
	}
	printf("%d\n",tot);
	for(int i=0;i<=tot;i++){
		a[i]=0;
	}
	tot=0;
	for(int i=1;i<=n;i++){
		if(p1[i]>=a[tot]){
			a[++tot]=p1[i];
		}
		else{
			a[work(p1[i])]=p1[i];
		}
	}
	printf("%d",tot);
	return 0;
}

P1182 80pts

#include<bits/stdc++.h>
using namespace std;
long long a[100001];
int main()
{
	long long n,m,l=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
        l=max(l,a[i]);
		a[i]+=a[i-1];
	}
	long long ans,r=a[n],mid;
	while(l<=r)
	{
		mid=(l+r)/2;
		long long js1=0,js2=0;
		long long i=0;
		while(i<=n)
		{
			if(a[i]-js1>=mid)
			{
				js2++;
				js1=a[i-1];
			}
			i++;
		}
		if(js2>=m)
		{
			l=mid+1;
			ans=mid;
		}
		else
		{
			r=mid-1;
            ans=mid-1;
		}
	}
	cout<<max(ans,l);
	return 0;
}

P1256 70pts

#include<bits/stdc++.h>
using namespace std;
char a[200][200];
int ans[200][200];
bool vis[200][200];
queue<int> x,y;
int p1[4]={0,0,1,-1},p2[4]={1,-1,0,0};
int m,n;
void read(char &ch){
	while(ch>'1'||ch<'0'){
		ch=getchar();
	}
}
void bfs(int x1,int y1,int x2,int y2){
	//printf("%d %d %d %d\n",x1,y1,x2,y2);
	if(a[x1][y1]!='1')
		if(ans[x1][y1]==-1)
			ans[x1][y1]=abs(x1-x2)+abs(y1-y2);
		else
			ans[x1][y1]=min(ans[x1][y1],abs(x1-x2)+abs(y1-y2));
	for(int i=0;i<=3;i++){
		if(!vis[x1+p1[i]][y1+p2[i]]&&x1+p1[i]>=1&&x1+p1[i]<=n&&y1+p2[i]>=1&&y1+p2[i]<=m){
			vis[x1+p1[i]][y1+p2[i]]=1;
			x.push(x1+p1[i]);
			y.push(y1+p2[i]);
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			read(a[i][j]);
			ans[i][j]=-1;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='1'){
			for(int k1=1;k1<=n;k1++){
				for(int k2=1;k2<=m;k2++){
					vis[k1][k2]=0;
				}
			}
				x.push(i);
				y.push(j);
				while(!x.empty()){
					bfs(x.front(),y.front(),i,j);
					x.pop();
					y.pop();
				}
			}
		} 
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='1')
				printf("0 ");
			else
				printf("%d ",ans[i][j]);
		}
		printf("\n");
	}
	return 0;
}

实在是调不动了awa

2024/7/25 16:03
加载中...