
noipxx普及组解题报告.docx
13页为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划noipXX普及组解题报告 NOIPXX普及组解题报告 From贴吧idu007zzt 金币 国王将金币作为工资,发放给忠诚的骑士 第一天骑士收到一枚金币;之后两天,每天收到两枚金币;之后三天,每天收到三枚金币;之后四天,每天收到四枚金币,以此类推;这种工资发放模式会一直延续下去,当连续N天收到N枚金币后,骑士会在之后的N+1天,每天收到N+1枚金币 请计算前K天里,骑士一共获得了多少金币 输入格式 输入包含一个正整数K,表示发放金币的天数 输出格式 输出一个正整数,即骑士收到的金币数 样例1 样例输入1 6 样例输出1 14 样例2 样例输入2 1000 样例输出2 29820 对于全部数据,1≤K≤10000 这种题目,简直就属于水题狂做的那种不多说,附C++代码 #include"" intk,ans=0; intmain(){ freopen("","r",stdin); freopen("","w",stdout); scanf("%d",&k); inti=1; while(k){ if(k>=i){ ans+=i*i; k-=i; }else{ ans+=k*i; k=0; } i++; } printf("%d\n",ans); return0; } 扫雷游戏 扫雷游戏是一款十分经典的单机小游戏。
在n行m列的雷区中有一些格子含有地雷,其他格子不含地雷 玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格 游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数 注:一个格子的周围格子包括其上、下、左、右、左上、左下、右上、右下八个方向上与之直接相邻的格子 输入格式 第一行用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数接下来n行,每行m个字符,描述了雷区中的地雷分布情况字符?'表示相应的格子是地雷格,字符(?)`表示相应的格子是非地雷格子相邻字符之间无分隔符 输出格式 输出文件包括n行,每行m个字符,描述了整个雷区用?表示地雷格,用周围地雷格数表示非地雷格相邻字符之间无分隔符 样例1 样例输入1 33 *?? ??? ?*? 样例输出1 *10 221 1*1 样例2 样例输入2 23 ?*? *?? 样例输出2 2*1 *21 对于所有的数据,1≤n≤100,1≤m≤100 又是水题一道,请允许我吐槽一下pj组的难度……别的没什么,注意字符的读入。
附C++代码 #include"" usingnamespacestd; intmatrix[105][105]; charstr[105]; intdir[3]={0,1,-1}; intn,m; intmain(){ freopen("","r",stdin); freopen("","w",stdout); scanf("%d%d",&n,&m); inti,j,k,t; for(i=1;i intn,m,i,j,x,y,a[55][55]; intmain(){ scanf("%d",&n);m=n*n;x=1;y=(n+1)/2;a[x][y]=1; for(i=2;i #include #defineN usingnamespacestd; intn,i,tm,tp,now,ans,sz,to[N],dfn[N],low[N],st[N];boolis[N]; voiddfs(intx){ dfn[x]=low[x]=++tm;st[++tp]=x;is[x]=1; inty=to[x]; if(!dfn[y])dfs(y),low[x]=min(low[x],low[y]); elseif(is[y])low[x]=min(low[x],dfn[y]); if(low[x]==dfn[x]){ for(sz=now=0;now!=x;)now=st[tp--],sz++; if(sz>1)ans=min(ans,sz); } } intmain(){ for(ans=1e9,scanf("%d",&n),i=1;i #include #include #definemxh usingnamespacestd; intans,T,n,i,x,y,pai[6],cnt[15]; voidfind(intstep){ inti,j,k,w; if(step>=ans)return; ans=min(ans,step+pai[1]+pai[2]+pai[3]+pai[4]); if(pai[4])for(i=2;i1){pai[cnt[j]]--;cnt[j]-=2;pai[cnt[j]]++;for(k=j;k1){pai[cnt[k]]--;cnt[k]-=2;pai[cnt[k]]++;find(step+1);pai[cnt[k]]--;cnt[k]+=2;pai[cnt[k]]++;}pai[cnt[j]]--;cnt[j]+=2;pai[cnt[j]]++;}pai[4]++;cnt[i]+=4;}if(pai[3])for(i=2;i=3){pai[cnt[i]]--;cnt[i]-=3;pai[cnt[i]]++;find(step+1);for(j=1;j1){pai[cnt[j]]--;cnt[j]-=2;pai[cnt[j]]++;find(step+1);pai[cnt[j]]--;cnt[j]+=2;pai[cnt[j]]++;}pai[cnt[i]]--;cnt[i]+=3;pai[cnt[i]]++;}if(pai[3]+pai[4]>=2)for(i=3;i=3&&cnt[i+1]>=3){pai[cnt[i]]--;cnt[i]-=3;pai[cnt[i]]++;w=i;for(j=i+1;cnt[j]>=3&&j=3)for(i=3;i=2&&cnt[i+1]>=2&&cnt[i+2]>=2){pai[cnt[i]]--;cnt[i]-=2;pai[cnt[i]]++; pai[cnt[i+1]]--;cnt[i+1]-=2;pai[cnt[i+1]]++;w=i+1; for(j=i+2;cnt[j]>=2&&j=5)for(i=3;i intL,n,m,i,w,l,r,mid,pos,ans,a[55555]; boolok(intx){ for(pos=w=0,i=1;i>1))ans=mid,l=mid+1;elser=mid-1; printf("%d",ans); } 【时间复杂度】O(nlgL)【空间复杂度】O(n) 【思想难度】30【编程难度】23【总用时】10min T5子串 【题目大意】有两个字符串A和B。
现在要从字符串A中取出k个互不重叠的非空子串,然后把这k个子串按照其在字符串A中出现的顺序依次连接起来得到一个新的字符串,问有多少种方案可以使得这个新串与字符串B相等?A的长度≤1000,B的长度≤200,k≤200 【解题说明】 特殊的10分做法:k=1,所以直接扫一遍判断就可以了 特殊的20分做法:k=2,所以枚举分隔点再扫一遍判断就可以了 特殊的20分做法:k=m,所以从前往后扫一遍DP统计一下方案就可以了 70分做法:考虑dp,用f[i][j][k]表示A串匹配到第i个字符,B串匹配到第j个字符,已经取了k个互不重叠的非空子串的方案数,那么f[i][j][k]=Σf[i-w-o][j-w][k-1](w=1-A[i]和B[j]的最大后缀匹配,i-w-o>=0),f[0][0][0]=1,这样直接转移的复杂度是O(nm^3k)的,把o这一维前缀和转移一下,就是O(nm^2k)的,可以通过70分的数据 90分做法:再把w也前缀和转移掉,就可以通过90分的数据 100分做法:加一个滚动数组,然后再卡一卡常,就可以通过100分的数据 【代码】 1.金币 (/c/pas) 国王将金币作为工资,发放给忠诚的骑士。
第一天,骑士收到一枚金币;之后两天,每天收到两枚金币;之后三天,每天收到三枚金币;之后四天,每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币 请计算在前K天里,骑士一共获得了多少金币 【输入格式】 输入文件名为 输入文件只有1行,包含一个正整数K,表示发放金币的天数 【输出格式】 输出文件名为 输出文件只有1行,包含一个正整数,即骑士收到的金币数 【输入输出样例1】 见选手目录下的coin/和coin/输入输出样例1说明】 骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币因此一共收到1+2+2+3+3+3=14枚金币 【输入输出样例2】 见选手目录下的coin/和coin/ 【数据说明】 对于100%的数据,1≤K≤10,000 【思路】枚举代码】 ViewCode 2.扫雷游戏 扫雷游戏是一款十分经典的单机小游戏在n行m列的雷区中有一些格子含有地雷,其他格子不含地雷玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。
游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子 【输入格式】 输入文件名为 输入文件第一行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数 接下来n行,每行m个字符,描述了雷区中的地雷分布情况字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格相邻字符之间无分隔符 【输出格式】 输出文件名为 输出文件包含n行,每行m个字符,描述整个雷区用’*’表示地雷格,用周围的地雷个数表示非地雷格相邻字符之间无分隔符 见选手目录下的mine/和mine/ 输入输出样例2】见选手目录下的mine/和mine/输入输出样例3】 见选手目录下的mine/和mine/ 【数据说明】对于100%的数据,1≤n≤100,1≤m≤100 【思路】 枚举+统计代码】 ViewCode 3.求和 (/c/pas) 一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n每个格子上都染了一种颜色,并且写了一个数字number。
定义一种特殊的三元组:。






![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)





