第一场多校,出了一题,,没有挂零还算欣慰。

  1001,求最小生成树和,确定了最小生成树后任意两点间的距离的最小数学期望。当时就有点矛盾,为什么是求最小的数学期望以及为什么题目给了每条边都不相等的条件。看了题解以后才明白:“首先注意到任意两条边的边权是不一样的,由此得知最小生成树是唯一的,最小生成树既然 是唯一的,那么期望其实也就是唯一的,不存在什么最小期望。”那么第一问最小生成树只要克鲁斯卡尔算法即可,第二问,总的路的条数是n*(n-1)/2,然后确定所有路的权值和的方法是:枚举每一条边,这一条边出现的次数是,它左右的点数之积。

  1002,博弈论,用状态压缩预处理出一行的状态,然后各行的sg值异或一下即可。代码如下:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
#include <map>
using namespace std;
typedef long long ll;
const int N = + ; int sg[<<],s[N]; void init()
{
for(int i=;i<(<<);i++)
{
int last = -;
memset(s,-,sizeof(s));
// 从右边为正
for(int j=;j<;j++)
{
if(!((i>>j) & )) // 找到第一个是0的位置(空位)
{
last = j;
}
if((i>>j) & ) // 再找到过去第一个不是空位的地方
{
if(last != -)
{
s[sg[i^(<<last)^(<<j)]] = ;
}
}
} int pos = ;
while(s[pos] != -) pos++;
sg[i] = pos;
}
} int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
int ans = ;
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int temp = ;
int m;
scanf("%d",&m);
for(int j=;j<=m;j++)
{
int t;
scanf("%d",&t);
temp ^= <<(-t); // 假设是正数过去的19,那么是1<<1,即右数过来的第二位
}
ans ^= sg[temp];
}
puts(ans?"YES":"NO");
}
}

  1004,线段树,询问指定区间内的gcd以及整个1~n区间内,gcd等于这个gcd的区间的个数。即使看了题解也很懵逼,网上找了一份貌似是rmq的代码,很巧妙,具体见代码和注释吧:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
#include <map>
using namespace std;
typedef long long ll;
const int N = + ; int T,n,m,a[N];
int mp[N][];
map<int,ll> M; int gcd(int a,int b) {return a%b?gcd(b,a%b):b;} void init()
{
M.clear();
int m = log(n)/log();
// mp的含义是从第i个数开始,长度为(1<<j)(包含自身),这个区间内数的gcd
// 以i开头的区间每次多加一个数字如果让gcd发生变小,gcd的值都至少除以2(最小因子为2)
for(int i=;i<=n;i++) mp[i][] = a[i];
for(int i=;i<=m;i++)
{
// 因为mp的值是根据后面的值来更新的,所以j从大到小
for(int j=n;j>=;j--)
{
if(j+(<<(i-)) <= n) mp[j][i] = gcd(mp[j][i-],mp[j+(<<(i-))][i-]);
else mp[j][i] = mp[j][i-];
}
}
} // 用于查询l~r区间内的gcd
int query(int l,int r)
{
int m = log(r-l+)/log();
return gcd(mp[l][m],mp[r-(<<m)+][m]);
} int main()
{
scanf("%d",&T);
for(int kase=;kase<=T;kase++)
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",a+i);
init(); // 因为temp的变化是log级别的,所以总的复杂度是n(log(n))^2
for(int i=;i<=n;i++)
{
int temp = a[i]; // temp表示从i开始的这个区间,不断变化着的那个gcd的值
int l = i, r = n, mid, o = l;
while(temp > ) // temp = 1的话后面的gcd就一直是1了
{
r = n, o = l; // o是指新区间的起始点
int ans = -;
// 二分是为了找到gcd为temp的最长区间
while(l <= r)
{
mid = l + r >> ;
if(query(i,mid) < temp) r = mid - ;
else
{
l = mid + ;
ans = mid; // 这里为什么一定要用ans记录而不能直接使用mid
// 可以那样例的1 2 4 6 7举例子
// i=2时,l和r都是5时,ans还是4,mid是5
// 那么,temp=2区间应该是2-4而不是2-5的
// 原因在于如果i~mid的区间的gcd比temp小的话,ans是不能更新的,而mid仍会更新
}
}
M[temp] += ans - o + ; l = ans + ; // l移动到下一个位置,来找下一个temp的区间
if(l > n) break;
temp = query(i,l);
}
// 要加这个条件是因为可能是 l > n 才break出来的
if(temp == ) M[] += n - l + ;
} printf("Case #%d:\n",kase);
scanf("%d",&m);
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
int x = query(l,r);
printf("%d %I64d\n",x,M[x]);
}
}
}

  1011,纯几何题,直接丢个觉得写得不错的博客:http://blog.csdn.net/libin66/article/details/51957808

  另外,丢个觉得不错的资料:点我。其实空间四面体的内切球圆心求法和平面三角形内切圆圆心的求法很像,可以通过类比推出来,把边换成平面就行。

2016 Multi-University Training Contest 1 部分题解的更多相关文章

  1. 2016 Al-Baath University Training Camp Contest-1

    2016 Al-Baath University Training Camp Contest-1 A题:http://codeforces.com/gym/101028/problem/A 题意:比赛 ...

  2. 2016 Multi-University Training Contest 3 部分题解

    1001,只要枚举区间即可.签到题,要注意的是输入0的话也是“TAT”.不过今天补题的时候却WA了好几次,觉得奇怪.原来出现在判断条件那里,x是一个int64类型的变量,在进行(x<65536* ...

  3. 2016 Multi-University Training Contest 4 部分题解

    1001,官方题解是直接dp,首先dp[i]表示到i位置的种类数,它首先应该等于dp[i-1],(假设m是B串的长度)同时,如果(i-m+1)这个位置开始到i这个位置的这一串是和B串相同的,那么dp[ ...

  4. 2016 Multi-University Training Contest 2 部分题解

    1009,直接贪心,只要让后面的尽量小,第一位和第二位尽量大即可. 1011,直接统计奇数的字母的个数,然后用偶数的个数平均分配到它们上面即可.代码如下: #include <stdio.h&g ...

  5. 2016 Al-Baath University Training Camp Contest-1 E

    Description ACM-SCPC-2017 is approaching every university is trying to do its best in order to be th ...

  6. 2016 Al-Baath University Training Camp Contest-1 F

    Description Zaid has two words, a of length between 4 and 1000 and b of length 4 exactly. The word a ...

  7. 2016 Al-Baath University Training Camp Contest-1 A

    Description Tourist likes competitive programming and he has his own Codeforces account. He particip ...

  8. 2016 Al-Baath University Training Camp Contest-1 I. March Rain —— 二分

    题目链接:http://codeforces.com/problemset/gymProblem/101028/I I. March Rain time limit per test 2 second ...

  9. 2018 Multi-University Training Contest 3(部分题解)

    Problem F. Grab The Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Ja ...

随机推荐

  1. JAVA生成验证码代码

    生成base64格式图片验证码 /** * 验证码的候选内容 */ private char codeSequence[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', ...

  2. QQ浏览器、搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie、Session失效问题

    原文:QQ浏览器.搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie.Session失效问题 这些狗日的浏览器在兼容模式下,保存Cookie会失败,是因为SameSiteMode默认为La ...

  3. NET如何使用ELinq-实现增删改查

    1 通过对ELinq主页的参考和学习,以及在项目中(wpf项目中用到的)中应用,ORM框架中的ELinq确实非常的强大,特此以建立wpf项目为例子来总结下如何在项目中应用ELinq,要想使用这个框架首 ...

  4. java EE加载peoperties配置文件

    //加载配置文件 InputStream in = JedisUtils.class.getClassLoader().getResourceAsStream("redis.properti ...

  5. 页面加载完毕后调用js方法进行布局操控 已实验

    页面加载完毕后调用js方法进行布局操控 已实验 $(function(){ var check1 = $("[id$=SMS]").is(':checked'); var bl=$ ...

  6. PPT 设置幻灯片母版

    现在我设计了一个PPT背景,我想新建幻灯片的时候,直接就是以这个背景展现,并把这个背景作用于左右的幻灯片. 1.选中第二页幻灯片,CTRL + C 复制一下 2.点击视图,幻灯片母版,背景样式,点击下 ...

  7. apache thinkphp5 强制https://访问

    根目录下,.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On ...

  8. MySQL安装步骤及环境变量配置

    MySQL安装 MySQL下载地址:http://dev.mysql.com/downloads/installer/1:首先进入的是安装引导界面2:然后进入的是类型选择界面,这里有3个类型:Typi ...

  9. Prometheus 监控 Redis 集群的正确姿势

    Prometheus 监控Redis的正确姿势(redis集群) Prometheus 监控 Redis cluster,其实套路都是一样的,使用 exporter. exporter 负责采集指标, ...

  10. linux下搭建redis内网端口映射工具-rinetd

    最近在工作中使用到了redis缓存,用来提某些业务场景的计算速度和某些情况下的操作频率限制,客户端工具使用了redisDesktopmanager来管理,在本机操作测试的时候,是没有问题的.但是将系统 ...