洛谷刷题
Fan Zhaoyang
爱上编程只是个意外!
才怪 -_-
展开
-
P1147
题目对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M。例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000M的一个解。#include<stdio.h>#include<math.h>//problem: luogu p1147//author: ZhaoyangFan//date: 2021.11.21int main(){ int原创 2021-11-21 18:34:24 · 421 阅读 · 0 评论 -
P1145
题目:n 个人站成一圈,从某个人开始数数,每次数到 m 的人就被杀掉,然后下一个人重新开始数,直到最后只剩一个人。现在有一圈人,k 个好人站在一起,k 个坏人站在一起。从第一个好人开始数数。你要确定一个最小的 m,使得在第一个好人被杀死前,kk个坏人先被杀死。思路:1、思虑良久没有想到什么简便解法,这里使用暴力求解。虽然使用暴力求解,也需要剪掉一些不必要的数据。2、由于不能杀掉好人,m>k。如果m<=k,第一次数数好人就要死去一个.3、死亡一个人,总人数减一,当前死亡人后面的人idx都原创 2021-11-21 16:55:35 · 283 阅读 · 0 评论 -
洛谷 p1125
1、这题比较简单,考虑字符的ascall码来做这题,可以用数组来存字符个数,具体看代码#include<iostream>#include<math.h>#include<string.h>using namespace std;int pd(int n){ if(n==1 || n==0) return 0; for(int i=2;i<=sqrt(n);i++) if(n%i==0)原创 2021-10-17 15:25:12 · 189 阅读 · 0 评论 -
洛谷 1109
1、题目很简单,就是满足所有分组要在L和R的区间中2、把所有的人数加起来,如果小于L x n 或者 大于R x n,明显不可以在区间内。排除这两种可能剩下的就是可以的了。3、剩下的我们只需要考虑,如果人数小于L,要补充多少到达L,如果人数大于R,要减少多少到达R。很明显我们先用多出来的人数去补充缺少的人数,再考虑用区间内的人数去补充缺失的人数或者把多的人数补充到区间内去。仔细想一下交换次数就是max(缺少的人数,多余的人数)。#include<iostream>using namesp原创 2021-10-15 15:19:33 · 62 阅读 · 0 评论 -
洛谷 p1105
1、题目的意思:一平台掉落它的左右两端点掉落会在哪个平台上。如果某高度有两块或更多平台,恰好一平台一个断点刚好掉落在上面,我们只算编号靠前的平台。2、由于我们输入数据时,高度不是排序输入的,而是杂乱的。如果我们把输入的数据按高度进行降序,这样是不是更好做了。3、平台A左端点掉落在平台B的条件是:A左端点大于B左端点,但小于B右端点。 同理平台A右断点掉落在平台C的条件是:A右断点大于B左断点,但小于B右断点。代码#include<iostream>using namespace st原创 2021-10-14 21:51:52 · 251 阅读 · 0 评论 -
洛谷 p1094
题目解法是用贪心解法,为什么要用贪心解法,请看这:heidoudou的讲解1、看完讲解,我们知道要如何去解决这个问题。有两个任务我们需要解决: 给无序数组排序、每组纪念品如何分配达到最少分组。2、通过题目我们可以看到,题目作者说明每组最多2个,我们就不需要考虑3个、4个……情况了。3、对于排序,我建议使用<algprithm》库中的sort()函数,这样可以减少写不少代码。还有一个原因是,作者我手动写了个二分排序算法但每次都超时了,改用sort后就通过了,大家可以尝试写一个快的排序算法试一试原创 2021-10-13 22:23:25 · 316 阅读 · 0 评论 -
p1789
插火把注意:1、这个题目,我的解法是开一个数组初始化为0,有位置的地方和放光的地方我设置为1,当全部输入完后,统计n * n区域内有多少个0就可以了.2、按常规方法开数组,例如我们开一个a[100][100],从(0,0)开始。这样的话我们就要考虑是否会出界问题。但是我们开一个a[200][200]从a[50][50]开始就不需要考虑出界了。#include <stdio.h>#include <stdlib.h>#include <string.h>//原创 2021-10-10 17:23:06 · 158 阅读 · 0 评论 -
p1652
国庆偷懒第三篇补注意:1、问题不复杂了解原理就很简单,下面讲述全部情况。一、题目要求是画曲线,如果(x1,y1),(x2,y2)都不在任何一个圆内,那就是穿过0条边界二、如果(x1,y1),(x2,y2)在同一个圆内,可以直接连线,不需要穿过外面这个圆,也就是0条边界。三、如果(x1,y1),(x2,y2)在不同圆内(或者1个在圆内1个不在任何圆内),也就是穿过2条边界(1条边界)2、解题思路就是判断是否(x1,y1),(x2,y2)是否在圆内,下面判断方法为distance(距离) = sq原创 2021-10-05 18:07:51 · 129 阅读 · 0 评论 -
p1634
国庆偷懒补上第二篇这题就很简单了注意:1、感染人数等于:新感染人数+原来感染人数。2、考虑是否会溢出,记得开大点。#include <stdio.h>#include <stdlib.h>//problem: luogu p1616//author: ZhaoyangFan//date: 2021.10.5int main(){ int x,n; scanf("%d%d",&x,&n); lon原创 2021-10-05 17:12:15 · 51 阅读 · 0 评论 -
P1615
国庆小长假和女朋友出去几天没发,得赶快补上了。解法相对复杂了点,有更简单直接的解法。注意:1、考虑是否溢出建议开long long2、用scanf("%s",x) 得用 getchar();消去回车不然数组会变成0,之前一直出错找不到原因#include <stdio.h>#include <stdlib.h>#include <string.h>//problem: luogu p1615//author: ZhaoyangFan//date原创 2021-10-05 17:03:03 · 103 阅读 · 0 评论 -
p1614
苦逼大三刷题第一天解题注意:1、是连续m个,不是每隔m个2、循环累加时,如果是从零开始,一定是小于n-m+1结束。要保证最后留m个3、数组尽量开大点#include <stdio.h>#include <stdlib.h>//problem: luogu p1614//author: ZhaoyangFan//date: 2021.9.28int main(){ int a[100005]; int n,m; scanf("原创 2021-09-29 13:48:57 · 121 阅读 · 0 评论