2023-12-01 14:03:39    166    0    0
9412,9398,9532,9552 **T1** **枚举** 直接枚举,时间复杂度为$O(n^3)$,$n=10^5$,必超时。 但题目求的是46的倍数,所以可以从余数入手。 分别统计$3$个数列模$46$余数的次数,此时再枚举,时间复杂度为$O(46^3)$. **T2** **DFS(全排列)** **"多个选手不能负责同一个区间,也不能一个选手负责多个区间"**,意味着一个人负责一个
2023-11-29 15:21:33    87    0    0
##**T1** **数论题** 满足条件: (1)$n+m=A$ (2)$n×m=B$ $70$分做法,枚举$A$的其中一个加数$x$,另一个加数=$A-x$。 $100$分做法,枚举$B$的第一个因数$x$,另一个因数=$B/x$. 显然,时间复杂度为$O(\sqrt{B})$,$T$组的时间复杂度为$O(T*\sqrt{B})$。 注意:需要用$long$ $ long$,不只是读入的时
2023-11-11 16:03:09    55    0    0
**BFS+DP** 道路的时间是限制,但不会计入到答案中,因为它只是起到了能不能走。 所以答案有两部分组成:**出发的时间**和**经过的时间**。 因为出发的时间必须是k的倍数,所以经过的时间也要k的倍数。 而出发的时间要根据**道路开放时间**进行变化,即如果遇到道路还没开放,则需要**推迟出发时间**且必须是**k的倍数**。 为了求出最短时间,那么需要记录到每个顶点的时间,**不同的线
2023-11-10 13:15:44    60    0    0
8067,9298,8601,8737 ##**T1** **模拟** 设数组a为填数字的数组,初值为-1. 分情况考虑: 1. 类似数学中的填数字谜,先把能填的填进去,但如果发生逻辑冲突,则说明失败。 2. 如果n>1且第1个数为0,则失败(前导0)。 3. 如果n=1且m=0,第1个数为-1,则输出0;否则输出第1个数。 4. 剩下的情况枚举数组a,只有第一个数是-1的情况下输出1(不能有前
2023-03-16 10:08:33    143    0    0
涉及知识点: - 随机生成速度 - 随机生成位置 - 随机生成字母 - 使用集合类型 - 匹配字母按键 - 使用定时器 - 统计游戏积分 - 实现倒计时效果 ##**一、创建一个字母气球** ###**1.创建游戏场景** ``` import pgzrun,random WIDTH = 640 HEIGHT = 480 def draw(): screen.fil
2023-03-05 18:33:04    179    0    0
主要知识点: - 处理键盘的按键事件 - 控制角色的方向 - 旋转角色的图像 - 字典数据类型的应用 - 使用延迟变量 ##**一、创建场景和角色** ###**1.创建游戏场景** 贪吃蛇的头、身体、实物,都是15×15的图块,所以地图的宽和高都应该是15的倍数,跟拼图游戏一样,可以设置图块的边长。 ``` import pgzrun import random SIZE = 1
2023-02-19 18:50:57    168    0    0
##**一、添加图块** ###**1.创建游戏场景** 图片采用96×96大小,界面划分成3×3的九宫格。 ``` import pgzrun import random SIZE = 96 #图块边长 WIDTH = 3 * SIZE #窗口宽度 HEIGHT = 3 * SIZE #窗口高度 finish = False
2021-10-09 17:06:07    404    0    0
##**前方预警** **只有有实力和编程非常熟练的学生才可以考虑用这个方法,熟练度一般的,不建议使用,因为你没有多余的时间写这个。** ###**原理** 利用windows的输出输入重定向功能(即改变输入输出的设备),结合windows的fc(文件比较命令),结合数据生成器,对程序进行对拍,一脸懵逼的看下图。 ![](/api/file/getImage?fileId=61615b83d17
2021-09-05 10:10:45    122    0    0
##**T1** 模拟。 分做减法,如果结果是负数,则向**时**借60分。 时做减法,如果结果是负数,则借24。 即: ``` if(分<0) {时--;分+=60;} if(时<0) 时+=24; ``` 输出结果请回忆[OJ:1569](http://magic.vicp.io/JudgeOnline/problem.php?id=1569) ##**T2** 模拟。 思路:遇到答案$T$且还未爆炸,则累加时间,移动盒子。 仔细分析题意能发现:盒子是按顺时针方向传递的。 ``` ... while(累计时间<210){ //如果累计时间大于或等于210,当前轮到的人必爆炸 读入时间和答案; 时间累加; if(答案=='T' && 累加时间<=210){ 传给下一个; //注意边界 } } ... ``` ##**T3** 枚举+计数模拟 计数用到的技巧学过的:[校门外的树](http://magic.vicp.io/JudgeOnline/problem.php?id=1074) 数据规模非常小$1 \leq N \leq 100$,$O(N^3)$也没问题。 枚举思路: 1.首先保存时间,因为是区间,所以需要用两个数组保存。 2.然后枚举思路框架如下: ``` for(int i=1; i<=n; i++){ //表示排除第i个人 计数数组初始化; //用memset初始化或者写一个循环初始化 for(int j=1; j<=n; j++){ //枚举时间段 if(i!=j){ //排除第i个人 for(第j个人的时间段) 覆盖的时间段填为1; } } 统计覆盖的时间并打擂台更新; } ``` 最极端情况时间复杂度为$O(100^3)$≈$1×10^6$,不会超时。 ##**T4** 枚举+模拟。 $N$非常小,最大才50,而距离最大不超过100,完全可以靠枚举分贝(距离)来寻找最优解。 枚举分贝的时候,然后对这个分贝进行验证,即能否散播给所有的兔子。 这里可以这样模拟:往右搜索和往左搜索 1.往右搜索,在当前分贝范围内,继续往右。 如果**当前分贝不能覆盖当前位置的兔子**,则把传播兔子的位置定在**当前位置兔子的前1只兔子的位置**,然后**分贝数-1**。 接下来会有两种情况: (1)能够传播给下一只兔子 (2)不能够传播给下一只兔子 第一种情况,不要处理,就按之前的方式继续往右搜。 第二种情况,做标记,直接跳出循环。 2.往左搜索。方法同上,需要注意的是,兔子位置小于或等于分贝表示能听到,跟往右搜索不同。 分贝枚举应从小到大,这样找到能传播给所有兔子的分贝后,可以提前结束搜索,起到优化效果。 分贝枚举应从0开始,因为同一个位置可以有多只兔子,极端情况下,所有兔子都在一个位置,这样0分贝,同样能传播给所有兔子。 **伪代码** ``` for(int i=1; i<=n; i++){ //枚举兔子 for(int j=?; j<=?; j++){ //枚举分贝 bool tag=1; //标记,当前分贝是否能散播给所有兔子 int k=j; //k为当前分贝 int last=i; //当前发出分贝的兔子位置 for(int z=?; z<=n; z++) //往右搜索 if(x[last]+?=1; z--) //往左传播 if(?>x[z]){ //分贝范围外 last=?; k--; //分贝-1
2021-09-05 09:56:35    399    0    0
**T1** 送分题。 本来这题是不想写的,但是发现好几个思路很混乱。 一副完整的棋子是:1,1,2,2,2,8 给定现有棋子的数量,求出需要添加或删掉几个 其实就拿标准棋子的数量减去给定棋子的数量就可以了 ``` int a[]={1,1,2,2,2,8}; //标准棋子的数量 for(int i=0; i<6; i++){ cin>>x; //读入给定棋子的数量 if(i>0) cout<<" "; //从第2个数开始,需要输出一个空格 cout<<a[i]-x; //计算结果,大于0需要补充的数量,小于0需要删掉的数量 } ``` 当然,你也可以输入6个变量,然后直接算式输出 ``` cout<<1-a<<" "<<1-b<<" "<<2-c<<....; ``` **T2** 把时分秒转成秒数,然后按秒数排序,记得时分秒要跟着排序-即关联数组排序。 **T3** 找规律。 扫描给定的图形,然后映射填字符。 啥叫映射填字符? 假设保存图形的字符数组为$c$ 假设扫到$c[i][j]$字符 (1)右边镜像位置$c[i][2*C-j+1]$ (2)下边镜像位置$c[2*R-i+1][j]$ (3)右下角镜像位置$c[2*R-i+1][2*C-j+1]$ 填完后输出即可 **T4** 枚举题。 **【题目分析】** 题目要求寻找[A,B]之间的某个奇数,使得这个奇数到P$_i$之间的最短距离之中最大。 因为A和B最大到10$^9$,如果枚举所有的奇数,加上扫描每个奇数到P$_i$之间的距离。时间复杂度达到$O(100*500000000)$=500亿,显然要超时。 这题要换个角度枚举。 (1)读题再分析,如果男孩的名字只有2个,即只有2个偶数。那么哪个奇数是到2个偶数的最短距离之中最大呢? 显然,距离要最大,应该在两个偶数的中点附近,即中点附近位置是最优的。。 ![](/api/file/getImage?fileId=64d73270d170a100130029e0) 所以,$N=100$的时候,任意两个偶数共有4950对,枚举任意两个偶数的中点附近位置,枚举的次数就少很多了。 (2)接着还要考虑给定的偶数不在区间[A,B]中,这时候要找的奇数在哪里呢?画图分析。 ![](/api/file/getImage?fileId=64d73270d170a100130029df) 所以,$A$和$B$的位置也要考虑。 综上所述,只要枚举$A$位置、$B$位置、任意两个偶数中点附近的位置。 **【参考程序】(为了防止复制粘贴,抠掉一些语句,如果理解了,也知道填什么)** ``` #include u
1/5