泉五培训Day2
T1 旅游
题目
【题目描述】
幻想乡有n个景点(从1开始标号),有m条双向的道路连在景点之间,每条道路有一个人气值d,表示这条道路的拥挤程度。小G不会经过那些人气值大于x的道路,她想知道有多少对景点(a, b)满足她能够从景点a到达景点b。
(a, b)和(b,a)算不同点对,要算两次。
【输入格式】
第一行一个数test,表示有test组数据。
对于每组数据,第一行有三个数n, m, q,q表示有q个询问。
接下来m行,每行三个数x, y, d,表示有一条连接x, y人气值为d的道路。
最后q行,每行一个询问x。
【输出格式】
对于每组数据,你需要输出q行,依次回答所有询问。
【输入样例】
1
5 5 3
2 3 6334
1 5 15724
3 5 5705
4 3 12382
1 3 21726
6000
10000
13000
【输出样例】
2
6
12
【数据规模】
对于前10%的数据,n <=200。
对于前40%的数据,n <=500, m <= 2000, q <= 100, d <= 1000。
对于前100%的数据:
1 <= n <= 20000, 1 <= m <= 10^5, 1 <= d<= 10^5, q <= 5000。
解析
先将边按边权排序,再依次加入图中,再用并查集维护图的连通性,把询问混入边中排序即可。
值得注意的是(a,b)不同于(b,a),因此计算时得乘2。
Code
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int test,n,m,q,md=,fa[],s[],ans[];
struct rec{
int x,y,z;
}edge[];
bool cmp(rec a,rec b)
{
return a.z<b.z;
}
int get(int x)
{
if(fa[x]==x) return x;
return fa[x]=get(fa[x]);
}
void find()
{
for(int i=;i<=m;i++)
{
int x=get(edge[i].x);
int y=get(edge[i].y);
if(x!=y)
{
fa[x]=y;
ans[edge[i].z]+=s[x]*s[y]*;
s[y]+=s[x];
}
}
}
int main()
{
cin>>test;
while(test--)
{
cin>>n>>m>>q;
for(int i=;i<=m;i++)
{
cin>>edge[i].x>>edge[i].y>>edge[i].z;
md=max(md,edge[i].z);
}
for(int i=;i<=n;i++)
{
fa[i]=i;
s[i]=;
}
sort(edge+,edge+m+,cmp);
memset(ans,,sizeof(ans));
find();
for(int i=;i<=md;i++) ans[i]+=ans[i-];
for(int i=;i<=q;i++)
{
int qu;
cin>>qu;
cout<<ans[qu]<<endl;
}
}
return ;
}
T2 序列
题目
【题目描述】
给出一个序列A(A_1A1,A_2A2,...,A_nAn)。有一些操作,每个操作给定三个正整数L,R,k,表示将区间[L,R]内的每个元素的值都减k。
你要告诉我,在第几次操作后,序列中第一次出现一个值为负的元素。
【输入格式】
第一行有二个整数N,M,描述序列大小和操作数。
接下来一行N个非负整数,描述A_1A1,A_2A2,...,A_NAN。
接下来M行,每行3个正整数L,R,k,描述一个操作。
【输出格式】
输出一行一个整数,描述答案。
如果序列中从未出现值为负的元素,输出-1。
【输入样例】
4 3
2 5 4 3
1 3 2
2 4 3
2 4 4
【输出样例】
2
【数据范围】
对于20%的数据,N,M≤1000。
对于40%的数据,N,M≤10^5。
对于100%的数据,N,M≤2x10^6,所有输入数据不超过10^9。
注意读入优化。
解析
因为数据量太大,所以暴力的话只能拿部分分。
先将原序列A差分,得到一个新序列B,其中Bi=Ai-Ai-1。
在A上的区间修改便成了在B上的单点修改。
先将所有操作有序加入一个栈中,再按从1到N的顺序计算Ai的值。
如果Ai为负数,就退掉栈顶的操作。
最后的答案即为栈内元素数量+1。
Code
#include <iostream>
#include <cstdio>
using namespace std;
int read() //快读
{
char c=getchar();int x=,f=;
while(c< || c>){if(c=='-') f=-;c=getchar();}
while(c>= && c<=){x=x*+c-;c=getchar();}
return x*f;
}
struct abc{
int l,r,z;
}p[];
int n,m,a[],b[],zz,mm;
int main()
{
n=read();m=read();
mm=m;
for(int i=;i<=n;i++)
{
a[i]=read();
b[i]=a[i]-a[i-];
}
for(int i=;i<=m;i++)
{
p[i].l=read();p[i].r=read();p[i].z=read();
b[p[i].l]-=p[i].z;
b[p[i].r+]+=p[i].z;
}
for(int i=;i<=n;i++)
{
zz+=b[i];
while(zz<&&m>)
{
if(p[m].l<=i) zz+=p[m].z;
if(p[m].r<i) zz-=p[m].z;
b[p[m].l]+=p[m].z;b[p[m].r+]-=p[m].z;
m--;
}
}
if(mm!=m) cout<<m+;
else cout<<-;
return ;
}
T3 最大公约数
题目
【问题描述】
给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b。
【输入格式】
输入共一行,一个正整数n。
【输出格式】
输出共一行,一个正整数表示答案。
【输入输出样例】
gcd.in |
gcd.out |
3 |
1 解释:只有(2,3)满足要求 |
【数据范围】
对于30%的数据满足n<=1000
对于60%的数据满足n<=10^5
对于100%的数据满足n<=10^7
解析
很显然,a=b时肯定是无解的,所以我们不妨设a>b。
则gcd(a,b)<=a-b,a xor b>=a-b,显然有c=a-b。
枚举c,a=i*c,因为gcd(a,a-c)=c,所以只需判断a xor c=a-c即可。
Code
#include <iostream>
#include <cstdio>
using namespace std;
int n,ans;
int main()
{
cin>>n;
for(int i=;i<=n;i++)
for(int j=;j<=n/i;j++)
if(((i*j)^i)==i*j-i)
ans++;
cout<<ans;
return ;
}
泉五培训Day2的更多相关文章
- 泉五培训Day5
T1 陪审团 题目 [题目描述] 陪审团制度历来是司法研究中的一个热议话题,由于陪审团的成员组成会对案件最终的结果产生巨大的影响,诉讼双方往往围绕陪审团由哪些人组成这一议题激烈争夺.小 W提出了一个甲 ...
- 泉五培训Day4
T1 收果子 题目 [题目描述] 有一个果园,有n棵果树依次排成一排,其中已知第 i 棵果树上结了ai个果子.现在要按照果树编号顺序依次收果子,对于一个能装v个果树的果篮,收果子从第1棵果树开始,如果 ...
- 泉五培训Day3
T1 家庭作业 题目 [问题描述] 小P为了能高效完成作业,规定每项作业花一个单位时间. 他的学习日从0时刻开始,有100000个单位时间.在任一时刻,他都可以选择编号1~N的N项作业中的任意一项作业 ...
- 泉五培训Day1
T1 树学 题目 [问题描述] 给定一颗 n 个点的树,树边带权,试求一个排列 P,最大化下式 其中,calc(a, b)表示树上由a到b经过的最大边权. [输入格式] 第一行一个整数 n,表示点数下 ...
- 性能测试培训day2
上节课 性能测试,多线程.协议.场景 实施:1,脚本开发 运行 排错(看回放,然后view-test_results,看业务) 参数化.关联.检查点.事务.思考时间.集合点 参数化:不做参数化的话, ...
- NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)
昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...
- 常州培训 day2 解题报告
第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...
- 长乐培训Day2
T1 足球联赛 题目 [题目描述] 巴蜀中学新一季的足球联赛开幕了.足球联赛有n只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得3分,输一场不得分,平局两只队伍各得一分. 英勇无 ...
- 8月清北学堂培训 Day2
今天是赵和旭老师的讲授~ 背包 dp 模型 背包 dp 一般是给出一些“物品”,每个物品具有一些价值参数和花费参数,要求 在满足花费限制下最大化价值或者方案数. 最简单几种类型以及模型: 0/1背包: ...
随机推荐
- 快速创建jquery插件
介绍 什么是插件? 插件我们见得很多了,比如浏览器上我们会安装一些去除广告的插件.美化页面的插件等等. 在前端,我们也常常写一些jquery插件来使用.来添加我们常常写的一些功能,方便使用. 为什么要 ...
- java 多线程 yield方法的意义
Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一 ...
- Quartz使用(3) - Quartz核心接口Trigger
Trigger最常用的有两种SimpleTrigger和CronTrigger,首先介绍Trigger的一些基础的信息,然后会详细描述这两种Trigger. 1. 通用Trigger属性 quartz ...
- Java取得一个对象里所有get方法和set方法, 读取某个类下所有变量的名称
所有get方法和set方法public void getMethod(Object obj){ Class clazz=obj.getClass();//获得实体类名 Field[] fields = ...
- C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序
本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...
- iOS 时间戳转成今天,上午,下午,星期几,几月几日,某年某月某日
项目中有聊天功能,老板让聊天的时间转换成和 QQ 的聊天时间一样的格式, 研究了一下,来分析下 QQ 的聊天格式时间 代码: 会话列表显示的时间 如需转成24小时制,需要使用 HH //时间显示内容 ...
- (生产)animate.css 动画库
官网:https://daneden.github.io/animate.css/ Animate.css是一个有趣的,跨浏览器的css3动画库 用法 首先引入animate css文件: &l ...
- Kindeditor单独调用多图上传
html代码: <input type="button" id="J_selectImage" value="图片上传" />& ...
- python 修改xml文件
在百度知道里面有人问了这么一个问题: 有一个xml文件:<root>text <a/> <a/> ...这里省略n个<a/> <root>想 ...
- EF--payload or not
负载加载非负载加载适用于多对多场境. 一.非负载(payload-free)加载 1.1创建表 create table Album ( AlbumId ,), AlbumName ) ) creat ...