iis 添加网站务川网站建设
web/
2025/10/6 11:59:46/
文章来源:
iis 添加网站,务川网站建设,找团队做网站,曲靖市麒麟区建设局规划网站前言#xff1a; 今日第一份题解#xff0c;题目主要是于枚举有关#xff0c;枚举算是算法题中较为简单的部分了#xff08;对我来说还是有些难想的#xff09;#xff0c;话不多说#xff0c;见下。 正文#xff1a;
题单#xff1a;237题】算法基础精选题单_ACM竞赛…前言 今日第一份题解题目主要是于枚举有关枚举算是算法题中较为简单的部分了对我来说还是有些难想的话不多说见下。 正文
题单237题】算法基础精选题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 (nowcoder.com)
合适的枚举内容
NC16593 [NOIP2011]铺地毯 #includebits/stdc.h
using namespace std;
int a[10000][4];
int main(){int n;cinn;for(int i1;in;i){cina[i][0]a[i][1]a[i][2]a[i][3];}int x,y;cinxy;for(int in;i;i--){if(xa[i][0]xa[i][0]a[i][2]ya[i][1]ya[i][1]a[i][3]){coutiendl;return 0;}}cout-1endl;return 0;
} 一开始像要开个数组模拟过程但明显会超时又想到查询只有一次那么我们便可以从最后铺上的地毯开始向前枚举如果按这个顺序枚举到了就一定是答案如果到尾都没枚举到就是没地毯。
合适的枚举内容
NC16438 回文日期 #includebits/stdc.h
using namespace std;
bool islunar(int y){return (y%40y%100!0)||(y%4000);
}
bool check(int year,int month,int day){if(month12||month0) return false;if(day31) return false;if(month2){if(islunar(year)day29)return false;if(!islunar(year)day28)return false;}if(month4||month6||month9||month11){if(day30) return false;}return true;
}
int main()
{int x,y,i,ans0;cinxy;int a,b,c,d,e,f,g,h;//8位数字int year,month,day;bool flagfalse;for(ix;iy;i){yeari/10000;month(i%10000)/100;dayi%100;ai%10;b(i/10)%10;c(i/100)%10;d(i/1000)%10;e(i/10000)%10;f(i/100000)%10;g(i/1000000)%10;h(i/10000000)%10;if(ahbgcfde){if(check(year,month,day)){ans;}}}coutansendl;return 0;
}
模拟时间推进的过程在枚举过程中判断回文并计数。
前缀和和差分
NC16649 校门外的树NC24636 值周 #includebits/stdc.h
using namespace std;
int a[100000005];
int main(){int l,m,ans0;cinlm;for(int i0;im;i){int x,y;cinxy;a[x];a[y1]--;}for(int i0;il;i){a[i]a[i-1];if(a[i]0)ans;}coutansendl;return 0;
}
两个题题目大意相同但数据范围不同这边直接放上数据大的题这题用差分可以很好写出来只要找出差分数组的前缀和数组中值为0的个数就为答案。 [CQOI2009]中位数图 #includebits/stdc.h
using namespace std;
int a[100005],l[100005],r[100005],aa[200005];
int n,b;
int main(){int res;cinnb;for(int i1;in;i){cina[i];if(a[i]b)a[i]1;else if(a[i]b)resi;else a[i]-1;}int sum0,ans1;for(int ires-1;i1;i--){suma[i];aa[nsum];if(sum0)ans;//coutsumendl;}sum0;for(int ires1;in;i){suma[i];ansaa[n-sum];if(sum0)ans;//coutsumendl;}coutansendl;return 0;
}
这题要求中位数为b的子序列因为子序列个数为奇数所以子序列中一定含有b所以我们只用讨论包含b的子序列不妨先确定b在子序列中在分别向两边讨论我们将大于b的数变为1小于的变为-1所以只要这段序列的和为0不包含b即为答案的一种情况。这边要讨论两种一种是一边为0一种是两边之和为0最后求出的即为答案。
NC20032 激光炸弹 #includebits/stdc.h
using namespace std;
int a[5005][5005];
int main(){int n,r,ans0;cinnr;for(int i1;in;i){int x,y,v;cinxyv;a[x][y]v;//couta[x][y]endl;}for(int i0;i5000;i){for(int j0;j5000;j){if(i0j0){a[i][j]a[i][j];}else if(i0)a[i][j]a[i][j-1];else if(j0)a[i][j]a[i-1][j];else a[i][j]a[i-1][j]a[i][j-1]-a[i-1][j-1];//couta[i][j] ;if(ir-1jr-1){if(ir-1jr-1)ansmax(a[i][j],ans);else if(ir-1)ansmax(a[i][j]-a[i][j-r],ans);else if(jr-1)ansmax(a[i][j]-a[i-r][j],ans);else ansmax(a[i][j]-a[i-r][j]-a[i][j-r]a[i-r][j-r],ans);}}//coutendl;}coutans;return 0;
}
通过二维前缀和来表示炸弹在该位置爆炸得到的价值最后还原为爆炸范围大小的块来枚举答案
NC207053 二分 #includebits/stdc.h
using namespace std;
mapint,int a;
int inf0x3f3f3f3f;
int main(){int n;cinn;for(int i0; in; i){int x;char op;cinxop;if(op.)a[x],a[x1]--;if(op)a[x]--,a[-inf];if(op-)a[x1];}int temp0,ans0;for(auto it:a){//遍历maptempit.second;//加上每个map对应的值ansmax(temp,ans);}coutansendl;return 0;
}
这题和二分一点关系都没有我们首先建立一个map来离散化的表示一个数组数组的值表示该点满足的裁判所说话的数量最后我们枚举map最大的值就是裁判最多有多少个回答是正确的因为该点可以满足这些情况。最后数组我们就根据裁判的话来建立如下
裁判说数大了那么裁判说对的取值范围是(-∞,a]裁判说数小了那么裁判说对的取值范围是[a,∞)裁判说数一样那么裁判说对的取值范围是[a,a]
最后得出答案。
NC50937 货仓选址 #include bits/stdc.h
using namespace std;
const int N 1e5 10;
int a[N];
int main(){int n;cinn;for(int i0;in;i)cina[i];sort(a,an);int ans0,l0,rn-1;while(lr) ansa[r--]-a[l];coutans;return 0;
}
将位置排序后知把货仓放在数组中间是正确的选择如果为奇数则中间那个距离为0剩下的两两配对最小的和最大的第二小的和第二大的。最后易得答案。
后记 这些题难度还算可以不过我看后面题难度在慢慢加大。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87897.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!