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;
}