普及+问题集,欢迎dalao解决(我一年前太菜了,先在依旧蒟蒻)

1号问题

#include <bits/stdc++.h>
using namespace std;
int t,n,a[200005];		
int l=0,r=0,ans=0;
string s;
bool check(int x){
    //检查删除1的个数能否小于或等于x
    int k0=r-x,k1=r-x,c1=0,c2=0,i=0;
    while(k0>0){
        if(a[i]==0)
            k0--;
        else
            c1++;
        i++;
    }
    i=n-1;
    while(k1>0){
        if(a[i]==0)
            k1--;
        else
            c2++;
        i--;  	
	}
    return min(c1,c2)<=x;
}
int main(){
	cin>>t;
	while(t--){
		cin>>s;
		n=s.size();
		l=0,r=0;
		for(int i=0;i<n;i++){
			a[i]=s[i]-'0';
			if(a[i]==0)
				r++;
		}
		while(l<=r){
			int mid=(l+r)/2;
			if(check(mid)){
				ans=mid;
				r=mid-1;
			}else
				l=mid+1;
		}
		cout<<ans<<endl;
	}
	return 0;
}

2号问题

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,sx,sy;
ll a[2005][2005];
bool vis[2005][2005];
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
struct Node{
	int x,y;
};
void bfs(int i,int j){
	queue<Node> q;
	q.push(Node{i,j});
	vis[i][j]=1;
	int ans=0;
	while(!q.empty()){
		Node tmp=q.front();
		q.pop();
		if(a[sx][sy]==1){
			cout<<ans;
			exit(0);			
		}
		for(int d=0;d<4;d++){
			int xa,ya;
			xa=tmp.x+dx[d];
			ya=tmp.y+dy[d];			
			if(xa>0&&xa<=n&&ya>0&&ya<=m&&!vis[xa][ya]){
				a[sx][sy]=__gcd(a[xa][ya],a[sx][sy]);
				vis[xa][ya]=1;
				q.push(Node{xa,ya});
				ans++;			
			}
			if(a[sx][sy]==1){
				cout<<ans;
				exit(0);
			}
		}
	}
	cout<<-1;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	cin>>sx>>sy;
	bfs(sx,sy);
	return 0;
}

3号问题

#include <bits/stdc++.h>
using namespace std;
const int n=9,N=17;
char x[n][n],y[n][n];
bool visx[n][n+1],visy[n][n+1],visz[n][n+1];
int a[n][n];
void print(){
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}	
	return ;	
}
void dfs(int i,int j){
	if(i==n){
		print();
		exit(0);
	}
	for(int k=1;k<=n;k++)
		if(!visx[i][k]&&!visy[j][k]&&!visz[i/3*3+j/3][k]){
			if(i%3!=0)
				if(y[i-1][j]=='^'&&k<=a[i-1][j])
					continue;
				else if(y[i-1][j]=='v'&&k>=a[i-1][j])
					continue;
			if(j%3!=0)
				if(x[i][j-1]=='<'&&k<=a[i][j-1])
					continue;
				else if(x[i][j-1]=='>'&&k>=a[i][j-1])
					continue;
			visx[i][k]=visy[j][k]=visz[i/3*3+j/3][k]=1;
			a[i][j]=k;
			if(j==n-1)
				dfs(i+1,0);
			else 
				dfs(i,j+1);		
		}
	return ;
}
int main(){
	for(int i=0;i<n;i++){
		int k=0;
		for(int j=0;j<6;j++){
			char d;
			cin>>d;
			if(d!=' ')
				x[i][k++]=d;			
		}
		if((i+1)%3==0)
			continue;
		k=0;
		for(int j=0;j<n;j++){
			char d;
			cin>>d;
			if(d!=' ')
				y[i][k++]=d;			
		}
	}
	dfs(0,0);
	print();
	return 0;
}
//洛谷有这道题

4号问题

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int inf=0x3f3f3f3f;
int t,a,b;
signed main(){
	cin>>t;
	while(t--){
		cin>>a>>b;
		while(a>0){
			int lg=log(a)/log(2);
			if(pow(2,lg)==a) break;
			a--;
		}
		int ans=a,k=1,res=0;
		while(ans<b)
			ans+=k,k*=2,res++;
		cout<<res<<endl;
	}
	return 0;
}

5号问题


没代码,不会

暂时就这些,希望大佬帮助本蒟蒻

T3吗

呃,好像是

@吴梓峤 我怎么没有找到?

这是去年的

你就看截图吧