#4772. 2026/2/10/LH笔记(下标计数+模拟)

2026/2/10/LH笔记(下标计数+模拟)

当前没有测试数据。

#include
using namespace std;
const int N=2e5+10;
int t,n,a[N],b[110];
//数组计数,下标计数
//就是用数组来记录一些数据 只是这些数据 和数组的下标正好对应上了
//1 2 3
//b[i]:统计数字i的出现次数
//b[i+100]:统计数字i的出现次数
//b[0]:统计数字-100的出现次数

//b[3]
//a数组里面有n个数字 这些数字的大小是从-100,到100
//还是想统计每个数字的出现次数
//下标不能是负数,为了解决这个问题
//解决方案1:开另外一个数组 专门用来记录负数的出现次数
//解决方案2:把下标整体 加一个偏移量,这样的话 可以保证下标就不会越界了
//a数组里面有n个数字 这些数字的大小是从0.0-->10.0  最多只有一位小数
//这个问题的话 我们可以把下标乘以10  然后再记录
//假设 b[i]统计a数组当中 数字i的出现次数
//b数组的最大值 有什么特殊含义吗???
//5-->1 2 2 3 3
//b数组的值 存的是 某个数字的出现次数
//b数组的最大值 其实是 出现次数最多的那个数字 出现了多少次
//b数组的最大值下标 到底是哪个数字他的出现次数是最多的

//利用下标计数/数组计数  进行排序   计数排序
//冒泡  插入 选择  sort
//虽然计数排序 非常快  时间复杂度是 O(n) 但是局限性很大 一般是不使用计数排序的
//都是用数组 来记录数字的出现次数
//但是 数组不仅仅可以用来记录数字的出现次数 还可以用来标记物品的状态
//b[i]标记第i盏灯被操作过几次 
//b[i]来表示第i个小矮人 还在不在 b[i]=1  b[i]=0
//课后作业1: 灯的开关这道题目 也有数学方法  
//一边统计数字的出现次数 一边计算答案
c[i]  存的是-i的出现次数
int main(){
    cin>>n;
    for(int i=1;i>a[i];//-100
        b[a[i]+100]++;//b[0];
    }
    for(int i=0;i
using namespace std;
const int N=2e5+10;
int t,n,a[N];
//模拟算法: 我们要思考一下 我们要记录哪些信息
//我们就开一些变量来记录就可以了
//在模拟算法这里 一定要学会调试代码 
int n,a[N],len,ans;//总共有n天  x第一天是星期几
//数组里有n个数字  求最长的连续上升的长度是多少
//连续性问题当中 边界问题   
//解决方案1: 我在a数组的最后面再一个值
//解决方案2: 等for循环结束之后 我再额外判断一次
//len是我到某个位置的时候  当前的最长连续上升长度 是几
//求a数组当中 最长的 连续偶数的长度

//众数这道题目的思路:
//1.先找出现次数最多的数字 出现了多少次
//2.统计有几个众数
//3.看一下这几个众数 分别是数字几
int main(){
    cin>>n;
    for(int i=1;i>a[i];
        if(a[i]>a[i-1]){
            len++;
        }else{
            if(len>ans) ans=len;
            len=1;
        }
    }
    if(len>ans) ans=len;

    return 0;
}

#include
using namespace std;
const int N = 2e5 + 10;
int n, m, a[N], wz, bs;
// 如何判断一道题目 到底是用for循环 还是while循环
// 如果你很清楚这个循环的次数就用for循环
int main(){
	cin >> n >> m;
	//有n个人  报数报到m的会被枪毙
	for (int i = 1; i > a[i];
		if (a[i] == 0) a[i] = 2;
	}
	int sy = n;
	//shengyu 目前游戏还有多少monkey存活
	while (sy > 1){
		wz++;
		if (wz == n + 1) wz = 1;
		if (a[wz] == 0){
			bs++;
			if (bs == m){
				a[wz]--;
				if (a[wz] == 0){
					sy--;
				}
				bs = 0;
			}
		}
	}
    for(int i=1;i0){
            cout<<i;
        }
    }
	return 0;
}