泉五培训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背包: ...
随机推荐
- LitJson(读Exce文件写入到json文件):
读Exce文件写入到json文件汇总: //命名空间 using System.Collections; using System.Collections.Generic; using System. ...
- 百度 CDN公共库
http://developer.baidu.com/wiki/index.php?title=docs/cplat/libs 简介 CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直 ...
- Docker学习笔记(2)-docker镜像操作
本节将会涉及Docker的镜像操作. 1. 获取镜像 如何获取Docker Hub上的镜像?可通过docker pull命令获取,其格式为: docker pull [选项] [Docker Regi ...
- crypto-js遇到的坑
最近在做H5网站,用websocket跟后台交互时,需要对数据进行加密,于是选了crypto-js组件,GitHub上api也不少,写的也清晰,但实际使用上会遇到不少坑: 加密解密时,传入的密钥key ...
- Javascript 对象(Object)
//声明方式 //调用 Object构造函数创建 var user = new Object(); user.name = "小白"; user.say = function () ...
- 前台异步传过来的URL中获取token/获取string链接中的token
1.链接例子: string url = "http://domainName:port/1/2/3/4.htm?sysCode=1001020&token=QXJzemR3YXlW ...
- Spring IOC + AOP 的实现
Spring思想很不错,尽量减少侵入式编程.现在了解到的Spring提供的功能有,DI,IOC,数据库操作,AOP,MVC.针对DI,AOP写了一些小DEMO PS:AOP真的很棒 代码参考:< ...
- The ninth day
a good egg 可不是好的鸡蛋的意思哦 它等同于 a good person 大好人的意思 eg: We all think he is a good egg. 我们都认为他是一个好人. I t ...
- python模块详解 XML
XML模块 XML是实现不同语言或程序之间进行数据交换的协议,和json一样. XML格式: <?xml version="1.0" encoding="UTF-8 ...
- Struts2_HelloWorld1
打开 eclipse,新建 web 项目. 因为可能需要 jstl 表达式,所以添加 jstl需要的jar包. 下载链接:http://pan.baidu.com/s/1hr6mBI0 将jar拷贝至 ...