2017 Multi-University Contests
文章平均质量分 60
US10152130155
ACMer
展开
-
2017 多校训练第二场 HDU 6052 To my boyfriend
#include using namespace std;typedef long long ll;const int maxn=105;int num[maxn][maxn];int n,m;ll cal(int x, int y) { ll res=0; int c=num[x][y],L=1,R=m; for (int i=x;i>=1;i--) {原创 2017-07-30 20:51:57 · 413 阅读 · 0 评论 -
2017 多校训练第一场 HDU 6040 Hints of sd0061
题意:给你一个长度为n的序列,序列由题面给的函数生成。然后m次询问,询问这个序列上第bi小的数。分析:n最大达到1e7,单纯的快排是不行的。但是可以利用快排的思想,每次找到一个划分,序列中比划分值小的数都在划分的左侧,反之则在右侧,这样每阶段都可以省一段时间。这就需要一个利器的STL了,C++中的nth_element(arr,arr+k,arr+n),用法是将长度为n的数组arr原创 2017-07-26 17:40:35 · 851 阅读 · 2 评论 -
2017 多校训练第六场 HDU 6097 Mindis
给出一个圆的半径,然后给出两个点P,Q的坐标,都不超出圆而且|OP|=|OQ|,问圆上一点到P和Q的距离之和最小是多少。根据题解写了一份程序,请各位大佬参考#include using namespace std;// #define test TEST int main(int argc, char const *argv[]){ #ifdef test freopen(原创 2017-08-10 23:40:36 · 292 阅读 · 0 评论 -
2017 多校训练第一场 HDU 6044 Limited Permutation
题意:有n个区间,对于第i个区间[li,ri]有li对于任意1题解:首先要理解题意:当前仅当li因此对于P[i]一定有P[i]>P[li-1]且P[i]>P[ri+1],进一步说区间[li,ri](除了[1,n])一定被某个区间[lj,rj]包含,且j=li-1或j=ri+1即区间j可分成[lj,j-1]和[j+1,rj]我们把n个区间按L升序R降序进行排序原创 2017-07-27 00:19:35 · 435 阅读 · 0 评论 -
2017 多校训练第二场 HDU 6055 Regular polygon
题意:给出n个坐标点,每个点的坐标都是整数。问这些点能形成多少个正多边形。分析:因为每个点的坐标都是整数,并且要求形成的是正多边形,可以推出只有正方形符合要求。因此就转化为求n个点最多能形成多少个正方形,与POJ 2002相同。拷贝的 POJ 2002代码#include #include #include using namespace std;原创 2017-07-27 17:17:50 · 436 阅读 · 0 评论 -
2017 多校训练第二场 HDU 6045 Is Derek lying?
题目链接:点击打开链接这道题算是一道逻辑判断。对于两个人的答案,我们可以找出相同的个数和不相同的个数。那么对于两人相同的答案,要么情况a:两人都对,要么情况b:两人都错对于两人不同的答案,要么情况c:A对B错,要么情况d:A错B对,要么情况e:两人都错。根据以上情况,我们可以列出等式:a+b=samec+d+e=diffa+c=xa+d=y又原创 2017-07-27 19:36:36 · 487 阅读 · 0 评论 -
2017 多校训练第二场 HDU 6047 Maximum Sequence
这一题真是累死我了,比赛的时候搞了一个树状数组结果TLE,最后还是队友写了一个线段树才过的,不就是树状数组多了一个logn嘛TAT,还有的大佬要是再卡一个常数,线段树可能都过不了TAT等到下来补题的时候,单调队列不懂怎么做TAT,就开始搞线段树,我觉得写得很对啊怎么又错了TAT,好吧换一种写法,看到有一种优先队列的写法,正确性自己想了想就写了,然后交上去还是错的TAT,怎么回事啊啊啊啊啊TAT原创 2017-07-28 15:19:56 · 378 阅读 · 0 评论 -
2017 多校训练第二场 HDU 6050 Funny Function
推公式#include using namespace std;// #define test TEST const int maxn=10005;const int mod=1e9+7;typedef long long ll;ll x,y;ll Quick_Mod(ll a,ll b){ ll ans=1; while(b){ if(b&1LL) ans=((an原创 2017-07-28 16:47:01 · 307 阅读 · 0 评论 -
2017 多校训练第二场 HDU 6053 TrickGCD
#include using namespace std;typedef long long ll;// #define test TEST const int maxn=1e5+5;const int mod=1e9+7;ll num[maxn<<1],a[maxn];ll mu[maxn];void mobius(ll mn){ mu[1]=1; for(ll i=1;i原创 2017-07-29 00:41:10 · 377 阅读 · 0 评论 -
2017 多校训练第四场 HDU 6069 Counting Divisors
计算每个素数的贡献,对于[l,r]中的大素数另外计算#include using namespace std;// #define test TEST /typedef long long ll;const ll mod=998244353;const ll maxn=1e6+10;bool su[maxn];ll prime[maxn],num[maxn],sum[maxn];原创 2017-08-07 00:03:08 · 321 阅读 · 0 评论 -
2017 第十场多校训练 HDU 6181 Two Paths 次短路+Dijkstra
/*裸的次短路不断更新v->u的次短路,直到v->u的次短路只比最短路小*/#include #include #include #include using namespace std;#define ll long long#define INF 1e18#define MAXM 100100struct edge{int to;ll w;};typedef pair原创 2017-08-24 23:24:00 · 464 阅读 · 0 评论 -
2017 多校训练第十场 HDU 6178 Monkeys 最小点覆盖+树形DP
题目大意:给你N个点的一棵树,现在有K只猴子,猴子们不会落单,也就是说,在同一个联通块中,至少有两只猴子。现在我们希望砍尽可能多的边,使得这K只猴子分部在若干个联通块中,使得满足上述条件。输出剩下的最少的边数。思路:这题O(n)做竟然卡读入优化。。。。。。。。。。。。。。。。。。。。。。①很显然,如果我们最终的答案是一个包含K个点的整个联通块原创 2017-08-25 00:07:41 · 420 阅读 · 0 评论 -
2017 多校训练第六场 HDU 6106 Classes
逻辑题根据容斥原理,选课程A的包括选有课程AB,课程AC以及课程ABC的。因此想要求到一个班级最大的人数,那么就是求只选A,B,C,AB,AC,BC,ABC的人数之和。如果有一门课程的人数小于0,那么跳过认为此数据错误,不做处理。#include using namespace std;const int maxn=100005;int a[7];int main(int原创 2017-08-10 20:38:47 · 369 阅读 · 0 评论 -
2017 多校训练第一场 HDU 6035 Colorful Tree
[ code=C/C++ ] #include using namespace std;#define test TEST typedef long long ll;const int maxn=2e5+5;int color[maxn],sum[maxn],siz[maxn];vectoredge[maxn];ll ans;void dfs原创 2017-07-26 14:26:55 · 477 阅读 · 0 评论 -
2017 多校训练第六场 HDU 6098 Inversion
题意很明显比赛的时候算了一下暴力的话,时间复杂度大概为O(n^2),我写的一个算法只用前缀最大值优化了左边的最值,右边暴力,答案是会T的。幸好队友用一种类似筛法的方法过了,下面是他的算法:#include #include using namespace std;const int maxn=100000+10;int p[maxn];int b[maxn];int m[m原创 2017-08-10 17:56:39 · 262 阅读 · 0 评论 -
2017 多校训练第三场 HDU 6063 RXD and math
打表找规律然后发现是n的k次幂然后快速幂,实现的时候有一些地方会溢出,可以快速乘或者先进行取模运算#include using namespace std;typedef long long ll;const ll mod=1e9+7;ll mul_mod(ll a,ll b){ ll ans=0; while(b){ if(b&1){ ans=(ans+a)%mo原创 2017-08-01 19:08:36 · 671 阅读 · 0 评论 -
2017 多校训练第三场 HDU 6066 RXD's date
水题,统计一下输入数据中小于等于35的个数据说出此题是为了吐槽浙江省这几天的温度#include using namespace std;typedef long long LL;int main(int argc, char const *argv[]){ int n; while(cin>>n){ int ans=0,t; fo原创 2017-08-01 19:12:26 · 383 阅读 · 0 评论 -
2017 多校训练第三场 HDU 6060 RXD and dividing
考场上被题面的斯坦纳树给吓到了。。。其实这个输入本身就是一个树,那么放在这个题里面就是找一个最小生成树。。。权当是为了理解吧题目的意思是把2到n这些点分成k个部分,根据最小斯坦纳树的定义,(x,fax)这个边的贡献就是x字数内不同标号的个数diff(i),显然diff(i)小于等于min(sz(i),k).通过构造让所有diff取得最大,答案就按照官方题解那样,虽然我也有点不明白。。。原创 2017-08-01 20:15:58 · 316 阅读 · 0 评论 -
2017 多校训练第五场 HDU 6092 Rikka with Subset
很多个较小的数字可以随机组合成较大的数字,所以B数组从小到大开始遍历,除了空集,最小的那个存在的个数对应的数字必然是a数组中的数字。每求出这一部分之后,更新后续的B序列。分析完后,主要的难点就是怎么去让已求出来的A序列随机组合,更新后续的B序列直接减就可以了。看成01背包问题,让m为背包去装 i,初始值为dp[0] = 1,由于i依次增大,A子集随机组合不会重复。#include原创 2017-08-08 21:53:50 · 420 阅读 · 0 评论 -
2017 多校训练第五场 HDU 6085
#include using namespace std;const int maxn=50005;unsigned a[maxn],b[maxn],c[maxn];const int mod=2;void setA(int p,int x){ int p1=p/32,p2=p%32; a[p1]|=(1<<p2);}int getB(int p){ in原创 2017-08-09 15:07:03 · 328 阅读 · 0 评论 -
2017 多校训练第三场 HDU 6058 Kanade's sum
未完待续#include using namespace std;typedef long long ll;const ll mod=1e9+7;const ll maxn=5e5+5;int a[maxn],pre[maxn],nxt[maxn],pos[maxn];int main(int argc, char const *argv[]){ int T,n,k; sc原创 2017-08-02 01:30:42 · 455 阅读 · 0 评论 -
2017 多小训练第三场 HDU 6061 RXD and functions
NTT#include using namespace std;typedef long long ll;const int mod=998244353;const int maxn=4e5+5;const int g=3;ll ni[maxn],fro[maxn],K[maxn],qp[30],F1[maxn],F2[maxn],ans[maxn];int getlen(in原创 2017-08-03 00:16:39 · 519 阅读 · 0 评论 -
2017 多校训练第一场 KazaQ's Socks
#include #define test TEST using namespace std;typedef long long ll;const int maxn=100005;const int mod=1e9+7;int main(int argc, char const *argv[]){ ll n,k,cas=1; while(~scanf("%lld %原创 2017-07-25 19:56:52 · 395 阅读 · 0 评论 -
2017 多校训练第一场 Add More Zero
#include#include#define test TEST using namespace std;const int maxn=100005;const int mod=1e9+7;// int a[maxn],b[maxn];int main(int argc, char const *argv[]){ int cas=1,n; while(~scanf("%d原创 2017-07-25 19:44:37 · 352 阅读 · 0 评论 -
2017 多校训练第一场 HDU 6034 Balala Power!
#include // #define test TEST using namespace std;typedef long long ll;const int maxn=100005;const int mod=1e9+7;string s[maxn];char str[maxn],temp[maxn];ll alpha[26],fac[maxn];bool vis[26];原创 2017-07-26 00:37:12 · 413 阅读 · 0 评论 -
2017 多校训练第一场 HDU 6038 Function
#include #define test TEST using namespace std;const int maxn=100005;const int mod=1e9+7;typedef long long ll;int a[maxn],b[maxn];int vis[maxn];vectorA;vectorB;int main(int argc, char con原创 2017-07-26 01:17:29 · 357 阅读 · 0 评论 -
2017 多校训练第九场 HDU 6168 Numbers 贪心枚举
因为a数组都是正数,那么根据定义:混合之后的数组中最小的两个数必然是在a数组的,因此先选取这两个数,然后贪心枚举。比赛的时候,没有枚举b数组的数,因此map就自动生成了许多数,造成MLE。现在重写一遍倒是想明白了。AC代码:#include using namespace std;const int mod=1e9+7;const int maxn=150000;int原创 2017-08-22 22:48:00 · 313 阅读 · 0 评论