
NOIP
NOIP原题题解
jqsh_
这个作者很懒,什么都没留下…
展开
-
P7073 [CSP-J2020] 表达式&2006:【20CSPJ普及组】表达式
一本通传送门洛谷传送门感谢 OMG_wc大佬的宝贵思路题干解析看完题,可分析出以下几点:1 本题是20年CSP-J 最难的题2 读入是后缀表达式,用栈存储3 计算过程要用位运算大体思路首先,读入,用栈存储其次,求出初始(修改前)结果,并判断各数是否能影响到最终结果 。此处有详细解释最后,判断就好了。附录位运算顺序不影响结果!!!!!a^=1 是取反运算代码#include<bits/stdc++.h>using namespace std.原创 2021-08-11 14:06:27 · 1005 阅读 · 1 评论 -
1569:【 例 1】石子合并 & P1880 [NOI1995] 石子合并
洛谷一本通注:此题一本通测点更为严谨。题干分析此题与这题差不多,就是多了化环为链的过程(其实就是*2)思路这题博客食用效果更佳 明明是偷懒 ,具体区别详见代码,而最大最小一个max一个min。代码#include<bits/stdc++.h>using namespace std;int n,m,a[1001],f[1001][1001],dis[1001][1001];int main(){ scanf("%d",&n); memset(f,127.原创 2021-02-01 13:48:18 · 689 阅读 · 1 评论 -
1987:【20CSPS提高组】括号树&P5658 [CSP-S2019] 括号树
题干题目分析emmm…NOIP2020 考完后在写要用栈代码#include<bits/stdc++.h>using namespace std;int n,f[500001],sum1,sum2,l[500001];long long ans,sum[500001],dis[500001];char a[500001];vector<int>s[500001];inline int read(){ int k=0,k1=1; char ch=ge.原创 2020-11-30 19:48:03 · 719 阅读 · 0 评论 -
1985:【19CSPJ普及组】加工零件
那年普及组考的挺好,不像2020,哎,说多了都是泪题干:散发着幽幽蓝光的传送门题干分析这道题看上去很难 确实很难 ,但是有一点很重要,就是相邻两个工人可以不停要求对方提供零件,直到原材料,两个工人,可以理解为不停减2,奇偶性不变。然后就要考虑用各种方法求最短路了具体思路...原创 2020-11-20 16:20:18 · 1017 阅读 · 0 评论 -
CSP-J 2020方格取数
今年CSP-J考挂了,int提交前脑残改long long导致T2爆零,T3两个小时没搞出来,爆零。T4想出正解,没时间了,爆零。今年CSP-J考的痛苦极了~~~好了,话不多说 明明说了很多题干:蓝色的传送门题干分析这明显是dp,最正常不过的dp上下右三个设置决定了要开三维数组(顶礼膜拜用二维(或更少)的大神们)注意:方向向右不能向左,所以dp时要按列dp!!!,因为每一个格都只能走一次,所以要向上后不能向下,向下后不能向上。具体思路从右上向左下,先按列后按排dp(具体见代码).原创 2020-11-20 15:44:11 · 1202 阅读 · 5 评论 -
同余方程
题干在此题干分析 & 思路讲解ax=1(mod b),分析这个式子,可得ax+by=1(不懂看蓝书),然后用扩展欧几里得算法 可求方程的特解x0,然后再求通解x:x=(x0+b)%b x=(x _0+b)%bx=(x0+b)%bb就是题目中的b,将x+b后%b可以保证x为正整数,并且小于零ps. 蓝书的标程比这个复杂多了(小小的得意一下)程序在此// 2020.10.17 jqsh 好难... #include<bits/stdc++.h>usin.原创 2020-10-23 15:55:35 · 254 阅读 · 1 评论 -
扩展欧几里得算法
蓝书的,主要是因为写同余方程学的定理: 设a和b不全为0,则存在整数x和y,使得 ax+by=gcd(a,b) ax+by=gcd( a,b) ax+by=gcd(a,b)证明 -开始装大神-用欧几里得算法也就是辗转相除法时当在最后一步,即b=0时gcd(a,b)=a gcd(a,b)=agcd(a,b)=a所以1∗a+0∗0=a1*a+0*0=a1∗a+0∗0=a当递归回去时bx’+(a%b)y’=gcd(b,a%b)=gcd(a,b)因为a%b=a-a/b*b..原创 2020-10-17 19:53:34 · 150 阅读 · 0 评论 -
1850:【07NOIP提高组】树网的核
传送门题干分析这是一道图论的题(没学过?别怕),分析可知 分析了两个小时 我们要求在找到小于s长的线段,并且满足到该线段最远的点最小。具体思路用二维数组存下点与点之间的联系,然后用 floyed 求出每两点之间的最短长度(没学过?啃书去),随后我们只需枚举线段,找到最小值即可。点与线段间距离公式:(f[k][i]+f[k][j]−f[i][j])/2 (f[k][i]+f[k][j]-f[i][j])/2(f[k][i]+f[k][j]−f[i][j])/2ps. f 数.原创 2020-10-03 13:55:46 · 199 阅读 · 0 评论 -
NOIP全国联赛提高组 1996年 数制转换
题干:题干很简单的一道模拟题… 做了好久…具体思路对于任意数制,我们都要先将其转化为十进制,再将它转换为想要的进制对于每一数位来说,其十进制的值都是(当前进制)当前数位-1然后再以同样的方法将十进制表示的数转换成我们想要的进制即: 用十进制减去上述式子,然后输出代码#include<bits/stdc++.h>using namespace std;long long n,sum,l,b,c,a,x,y,ans[1001],f[3][101];char c.原创 2020-10-01 10:20:46 · 298 阅读 · 0 评论 -
1929:【04NOIP普及组】火星人
题干~这道题有好多废话,不过和全排列非常像 →所以这道题数字的大小顺序与全排列的默认顺序一模一样全排列的代码:本题就是一次次地调用全排列,不愿意麻烦的 就是我 可以用STL,非常方便。代码 (100分)#include<bits/stdc++.h>using namespace std;int n,m,a[10001],t;int main(){ scanf("%d %d",&n,&m); t=n-1; for(int i=1;..原创 2020-08-19 13:07:45 · 563 阅读 · 0 评论 -
1927:【04NOIP普及组】花生采摘
题干在这里:散发着幽幽蓝色光芒的传送门题干分析:首先,题干里大多数都没什么用。 然而还是看的津津有味所以,提炼总结得出:多多每次采的不是最近的花生,而是当前花生丛中数量最多的。多多每次采摘要花费一个单位时间。对于路线无需优化。 废话啊…以下是解题思路:1. 爆搜 O(N2M2)按题目意思硬敲注意代码中有三个地方分别拿三个部分分代码 (100分)#include<bits/stdc++.h>using namespace std;int sum,m,n,.原创 2020-08-12 00:03:31 · 1442 阅读 · 0 评论 -
1923:【03NOIP普及组】数字游戏
123原创 2020-06-28 22:57:41 · 1171 阅读 · 0 评论 -
1570:【例 2】能量项链
题干:点我点我具体题解这里: 传送门原创 2020-06-24 07:08:52 · 384 阅读 · 0 评论 -
1843:【06NOIP提高组】能量项链
题干在这里:滋滋滋~神秘的传送门这道题题干的本质就是查找每一次合并的最大值,合并的过程想不明白可以自己画一段珠子和头尾标记辅助理解。 自己画的太难看不敢放理解题干后能知道,这道题本质上就是一个区间DP 别问我怎么知道的,具体思路如下:先放一下方程 给人很厉害的样子 :f[i][j]=max(f[i][j],f[i][k]+f[k][j]+a[k]×a[i]×a[j]) f[i][j]=max(f[i][j],f[i][k]+f[k][j]+a[k]×a[i]×a[j])f[i][j]=max(f原创 2020-06-23 23:14:25 · 496 阅读 · 0 评论 -
1943:【08NOIP普及组】排座椅
#include<bits/stdc++.h>using namespace std;int n,m,k,l,d,x,y,a,b,u[10001],v[10001],ans1[10001],ans2[10001];int main(){ scanf("%d %d %d %d %d",&n,&m,&k,&l,&d); for(int i=1;i<=d;i++){ scanf("%d %d %d %d",&x,&y,&原创 2020-05-13 19:46:26 · 770 阅读 · 0 评论 -
1911:【00NOIP普及组】税收与补贴问题
暴力#include<bits/stdc++.h>using namespace std;double MIN=-1e9,MAX=1e9;int sum=1,ans,num[10001],price[10001],m,n,x,y;int main(){ scanf("%d",&n); scanf("%d %d",&price[1],&num[1]); while(cin>>x>>y&&x!=-1&&.原创 2020-05-12 19:59:55 · 1279 阅读 · 0 评论 -
1939:【07NOIP普及组】纪念品分组
贪心懒得啥也不想打#include<bits/stdc++.h>using namespace std;int n,m,a[100001],ans;int main(){ scanf("%d %d",&m,&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); int x=1,y=n; while(x<=y){ if(a[x]+a[y]<=m){ .原创 2020-05-10 08:15:24 · 779 阅读 · 0 评论 -
1919:【02NOIP普及组】选数
首先来看题干,由于懒得写 篇幅原因,题干在这里神秘的传送门这道题是很明显的暴力我不会最优解大体思路如下:1.看数据,20以内,明显搜索2.从前往后,每一个数都只有两个状态,加入到组合中或者不加3.判断素数时可以用sqrt()函数来优化4.码递归代码注意1.题干中问的是组合方式,所以同一个数可能有多种组合2.组合的结果可能是1,所以在判断素数的时候要特判1最后上代码 100分...原创 2020-03-24 22:26:39 · 1279 阅读 · 0 评论 -
1915:【01NOIP普及组】最大公约数与最小公倍数
题干:传送门解析:首先我们知道,这道题的数据不大,所以直接暴力。其次加上一些优化:因为直接暴力好心虚1.我们可以由题推出P,Q都是x0的倍数。2.然后只需要找x0的倍数3.P,Q也一定小于y0最后上代码100分:#include<bits/stdc++.h>using namespace std;int n,m,f[1000001],v[1000001],sum...原创 2020-03-24 17:25:07 · 1425 阅读 · 0 评论 -
1910:【00NOIP普及组】计算器的改良
1910:【00NOIP普及组】计算器的改良首先让我们先看题干,鉴于我很懒 篇幅原因,题干在这里传送门(一本通网站)。看完题干后我首先想到的是解决输入,输入解决后就简单多了。把所有输入的数字都存到方程的左边,把所有输入的字母都放在方程的右边。拿样例举例,可以解出-6=-8a,然后就只需要把-6/(-8)就可以得到答案。(幸好这道题没有乘除、括号和空格,否则就是这道题了又一个传送门)上...原创 2020-03-22 22:10:01 · 2898 阅读 · 1 评论 -
1920:【02NOIP普及组】产生数
题干在这里:看我看我这道题事实上有多种解法(有的可能无法拿满):1.深搜,列举出每个数的状态2.广搜,具体代码看这道题3.原创 2020-03-27 14:13:10 · 1246 阅读 · 0 评论