2022牛客寒假算法基础集训营1:C-Baby‘s first attempt on CPU(思维、模拟)

三岁 秃头怪 程序员的CPU一血

在这里插入图片描述
题意:

  • 给定 n 个语句,再给出 n 个语句与自身 前三个语句(非空语句) 之间的关系,若有关系,就需要保证 n ~ n - i (i<=3) 之间有 至少三个语句

  • 你可以在任意位置插入 空语句,使得这种关系达成,问最少插入多少空语句能达成关系

思路:

  • n 只有 100 非常小,之间上手暴力大模拟;

  • 观察发现,任意关系达成时就要考虑插入空语句,但需统计该区间语句的个数(包括空/非空语句),贪心地插入到刚好三个就行

C o d e : Code: Code:

#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
#define mem(a,b) memset(a,b,sizeof a)
#define cinios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))
#define sca scanf
#define pri printf
#define ul (u << 1)
#define ur (u << 1 | 1)
//#define x first
//#define y second
//#pragma GCC optimize(2)
//[博客地址](https://blog.csdn.net/weixin_51797626?t=1) 
using namespace std;

typedef long long ll;
typedef pair<int, int> PII;
typedef unsigned long long ull;

const int N = 5000010, M = 1010, MM = N;
int INF = 0x3f3f3f3f, mod = 100003;
ll LNF = 0x3f3f3f3f3f3f3f3f;
int n, m, k, T, S, D;
int b[N];//考虑到插入的语句个数,数组注意开大点
//设定b[i]==0代表空语句,否则为非空语句

int main() {

	cin >> n;
	int t;
	k = 0;

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= 3; j++) {
			cin >> t;
			if (t == 1) {
				int sum = 0, id = 0;
				for (int g = k; g; g--) { //往前统计该段区间语句的个数
					if (b[g] == 1)id++;
					if (id == j)break;//到区间左端就break
					sum++;//否则统计
				}
				sum = max(0, 3 - sum);//计算要插入的语句个数,不为负
				while (sum--)b[++k] = 0;//插入0
			}
		}
		b[++k] = 1;//当 i 点确认完它的关系后,再把 i 点加入
	}

	int sum = 0;
	for (int i = 1; i <= k; i++)
		if (!b[i])sum++;

	cout << sum;

	return 0;
}
/*
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值