2023牛客寒假算法基础集训营1 - A H

题目链接:传送门
牛客题解:传送门

A 模拟题

A World Final? World Cup! (I)

思路
从前往后遍历字符串,更新当前战队的胜利和剩余场次情况。
如果在某一回合,某一对的胜场 + 剩余场已经小于对面的胜场,那么这一回合点球大战就已经结束了

详见代码,就是模拟游戏过程

代码

void solve(){
	string ss;
	cin >> ss;
	int c[2] = {0, 0}, d[2] = {5, 5}, ans = -1;
	for(int i = 0; i < 10; ++ i){
		if(i % 2) c[0] += (ss[i] == '1'), -- d[0];
		else c[1] += (ss[i] == '1'), -- d[1];
		if(c[0] + d[0] < c[1]){
			ans = i + 1; break;
		}
		if(c[1] + d[1] < c[0]){
			ans = i + 1; break;
		}
	}
	cout << ans << '\n';
	return ;
}

H-本题主要考察了DFS

  思路:大水题!
  比赛的时候想复杂了,其实就是说还是缺少了目标意识。题目最终求的就是制作成本,而不是如何完成拼图。打的时候我一直在想写出这么一个拼图的代码的可能性,但是被我自己否决了,因为我觉得凭我的能力还不太行,所以就没整出了这题。但看了题解之后发现,其实题目是把真正需要做的事情隐藏起来了。
  既然是求制作成本,那么关键的问题就在于判断缺失拼图的凹凸个数。但其实整个拼图最终形成的图形是具有特殊性的,就是说一个凹对应一个凸!所以整体的总制作成本就是10n2,再用总制作成本减去已知的所有个体拼图的制作成本,得到的就是缺失拼图的制作成本。
  总之,多练多学,会有收获的!
代码:

//>>>Qiansui
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define mem(x,y) memset(x,y,sizeof(x))
//#define int long long

inline ll read()
{
	ll x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

using namespace std;
const int maxm=2e5+5,inf=0x3f3f3f3f;

void solve(){
	int n,total_sum=0,cnt;
	cin>>n;
	total_sum=10*n*n;
	string ss;
	for(int i=0;i<n*n-1;++i){
		cin>>ss;
		cnt=10;
		for(int j=0;j<4;++j){
			if(ss[j]=='1'){
				--cnt;
			}else if(ss[j]=='2'){
				++cnt;
			}
		}
		total_sum-=cnt;
	}
	cout<<total_sum<<endl;
	return ;
}

signed main(){
//	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int _=1;
	cin>>_;
	while(_--){
		solve();
	}
	return 0;
}
posted on 2023-01-17 23:09  Qiansui  阅读(30)  评论(0编辑  收藏  举报