XJOI网上同步训练DAY1 T1】的更多相关文章

思路:我们考虑由于没有人的区间会覆盖其他人,所以我们将区间按左端点排序,发现如果地盘长度已知,可以贪心地尽量往左放,来判断是否有解,因此做法很简单,就是二分答案,然后O(n)贪心判定,复杂度为O(nlogn) 满分程序: #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #define ll long long ; i…
思路:考试的时候直接想出来了,又有点担心复杂度,不过还是打了,居然是直接A掉,开心啊. 我们发现,Ai<=7,这一定是很重要的条件,我们考虑状态压缩,去枚举路径中出现了哪些数字,然后我们把原来n个点拆成 我们枚举数字的最小公倍数 个,因为如果一个数模某个数等于0,那么模它的因数也一定是0,因此我们的思路就是拆点最短路. #include<cstdio> #include<cmath> #include<cstring> #include<algorithm&…
思路:考虑得出,最终的集合一定是gcd=1的集合,那么我们枚举n个数中哪个数必须选,然后把它质因数分解,由于质数不会超过9个,可以状态压缩,去得出状态为0的dp值就是答案. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<iostream> ],c[],p[],val[],f[][]; int read(){ ,f=;char ch=g…
思路:看来我真是思博了,这么简单的题目居然没想到,而且我对复杂度的判定也有点问题.. 首先我们选了一个位置i的b,那一定只对i和以后的位置造成改变,因此我们可以这样看: 我们从前往后选,发现一个位置的s和r相等,然后我们就选这个位置的bi,由于bi会改变当前位置,因此当前位置的vi我们就能吃到了.所以,每个位置的vi我们都能拿到,所以答案就是Σvi,然后只要模拟过去就可以了.. 我真是太弱鸡了..还有这个算法的复杂度是O(N^1.5),我一直以为是O(N^2).. #include<cstdio…
[问题描述] 为了迎接校庆月亮中学操场开始施工.不久后操场下发现了很多古墓这些古墓中有很多宝藏.然而学生们逐渐发现自从操场施工之后学校的运气就开始变得特别不好.后来经过调查发现古墓下有一个太守坟由于操场施工惊动了太守所以学校的运气才会特别不好. 你——月亮中学的学生之一为了拯救学校在梦中和太守进行了沟通.太守说“只要你能解决这个问题我就保佑你们从此事事顺心.你看操场下的古墓中有…
思路:一开始看到这题的时候想DP,可是发现貌似不行..因为有前缀也有后缀,而且有的后缀会覆盖到现在的前缀,这就不满足无后效性了啊! 但是有个很巧妙的思路:如果我们知道a[i]的最大值,那么p的数量和q的数量也确定了.所以序列长度也确定了,设m为序列长度. 而且对于每个a[i]都代表了一个固定数量的p和q和长度. 因此,长度大于m/2的前缀,我们可以用总的p和总的q减去它,转换成小于等于m/2长度的前缀后缀. 这样我们可以设计DP为f[i][j][k],代表从左往右i个中有j个p,从右往左i个有k…
思路:似曾相识?...见http://www.cnblogs.com/qzqzgfy/p/5266874.html 一看时限还是4s!,于是就开开心心地打了70%的分,就是用容斥原理,就可以n^3解决问题了. 实际情况:10分,wtf 我的程序: #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<iostream> ; ][],n,m,K…
就是对于一个数,我们去考虑把t*****减到(t-1)9999*的代价. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<iostream> #include<map> #define ll long long typedef std::pair<ll,int> info; std::map<info,in…
思路:线段树维护最短路 #include<cstdio> #include<cmath> #include<iostream> #include<algorithm> #include<cstring> struct node{ ][]; }t[]; ][]; ][]; ],n; int read(){ ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return t*f;…
思路:记得FJ省队集训好像有过这题,可是我太弱了,根本不懂T_T #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> int n,m; ][]; ][]; int read(){ ,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return t*f;…