2024年暑假第二周周报

Strange Balls

#include <bits/stdc++.h>
using namespace std;

stack<pair<int,int>> a;

int main() {
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		int x;
		cin>>x;
		if(a.empty()){
			a.push({x,1});
			cout<<"1"<<endl;
			continue;
		}
		if(x==a.top().first){
			if(a.top().second+1==x){
				x--;
				while(x--){
					a.pop();
				}
			}
			else{
				a.push({x,a.top().second+1});
			}
		}
		else{
			a.push({x,1});
		}
		cout<<a.size()<<endl;
	}
	return 0;
}

这道题是我自己当时没想好怎么表示消除球,也是对栈的使用不是很熟练导致没做出来。

Made Up

#include <bits/stdc++.h>
using namespace std;

int a[100005];
int b[100005];
int c[100005];
int d[100005];

int main() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
    for(int i=1;i<=n;i++){
        cin>>c[i];
    }
	long long sum=0;
	for(int i=1;i<=n;i++){
        d[b[c[i]]]+=1;
    }
    for(int i=1;i<=n;i++){
        sum+=d[a[i]];
    }
	cout<<sum;
	return 0;
}

这道题是当时没有想好用什么去存,把n方的复杂度变成2n的复杂度,这个是题做少了。

Connect 6

#include <bits/stdc++.h>
using namespace std;

char a[1005][1005];

int main(){
	bool p=false;
	int n,sum;
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin>>a[i][j];
		}
	}
	
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if((i+5)<n){
				sum=0;
				for(int k=0;k<6;k++){
					if(a[i+k][j]=='#'){
						sum++;
					}
				}
				if(sum>=4) p=true;
			}
			if((j+5)<n){
				sum=0;
				for(int k=0;k<6;k++){
					if(a[i][j+k]=='#'){
						sum++;
					}
				}
				if(sum>=4) p=true;
			}
			if((i+5)<n&&(j+5)<n){
				sum=0;
				for(int k=0;k<6;k++){
					if(a[i+k][j+k]=='#'){
						sum++;
					}
				}
				if(sum>=4) p=true;
			}
			if((i-5)>=0&&(j+5)<n){
				sum=0;
				for(int k=0;k<6;k++){
					if(a[i-k][j+k]=='#'){
						sum++;
					}
				}
				if(sum>=4) p=true;
			}
		}
	}
	if(p) cout<<"Yes";
	else cout<<"No";
	return 0;
}

这道题是当时想着怎么去把它补成六个#相连,没想去判断有四个及以上就好了

H and V

#include <bits/stdc++.h>
using namespace std;

char a[11][11];
int h,w,k;

bool check(int xi,int xj){
	int z=0;
	for(int i=0;i<h;i++){
		if(xi&(1<<i)) continue;
			for(int j=0;j<w;j++){
				if(xj&(1<<j)) continue;
				if(a[i][j]=='#') z++;
			}
	}
	return z==k;
}

int main(){
	cin>>h>>w>>k;
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			cin>>a[i][j];
		}
	}
	int sum=0;
	for(int i=0;i<(1<<h);i++){
		for(int j=0;j<(1<<w);j++){
			if(check(i,j)) sum++;
		}
	}
	cout<<sum;
	return 0;
}

当时没有明确的思路,后面看题解,每个行或列都有选和不选两种状态,用二进制的方式将所有情况枚举出来就行

这一周收获也很多,还在学习别的题目,再补一补。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值