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的更多相关文章

  1. 泉五培训Day5

    T1 陪审团 题目 [题目描述] 陪审团制度历来是司法研究中的一个热议话题,由于陪审团的成员组成会对案件最终的结果产生巨大的影响,诉讼双方往往围绕陪审团由哪些人组成这一议题激烈争夺.小 W提出了一个甲 ...

  2. 泉五培训Day4

    T1 收果子 题目 [题目描述] 有一个果园,有n棵果树依次排成一排,其中已知第 i 棵果树上结了ai个果子.现在要按照果树编号顺序依次收果子,对于一个能装v个果树的果篮,收果子从第1棵果树开始,如果 ...

  3. 泉五培训Day3

    T1 家庭作业 题目 [问题描述] 小P为了能高效完成作业,规定每项作业花一个单位时间. 他的学习日从0时刻开始,有100000个单位时间.在任一时刻,他都可以选择编号1~N的N项作业中的任意一项作业 ...

  4. 泉五培训Day1

    T1 树学 题目 [问题描述] 给定一颗 n 个点的树,树边带权,试求一个排列 P,最大化下式 其中,calc(a, b)表示树上由a到b经过的最大边权. [输入格式] 第一行一个整数 n,表示点数下 ...

  5. 性能测试培训day2

    上节课 性能测试,多线程.协议.场景 实施:1,脚本开发 运行  排错(看回放,然后view-test_results,看业务) 参数化.关联.检查点.事务.思考时间.集合点 参数化:不做参数化的话, ...

  6. NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)

    昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...

  7. 常州培训 day2 解题报告

    第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大 ...

  8. 长乐培训Day2

    T1 足球联赛 题目 [题目描述] 巴蜀中学新一季的足球联赛开幕了.足球联赛有n只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得3分,输一场不得分,平局两只队伍各得一分. 英勇无 ...

  9. 8月清北学堂培训 Day2

    今天是赵和旭老师的讲授~ 背包 dp 模型 背包 dp 一般是给出一些“物品”,每个物品具有一些价值参数和花费参数,要求 在满足花费限制下最大化价值或者方案数. 最简单几种类型以及模型: 0/1背包: ...

随机推荐

  1. DBCP数据连接池

    package com.itheima.utils; import java.io.InputStream; import java.sql.Connection; import java.sql.R ...

  2. 最新版本dede与discuz通过ucenter完美整合

    人合租虚拟主机.然后到相关的官方网站上面下载相关的程序,我下载的是DedeCmsV5.7-GBK+Discuz_X2_RC_SC_GBK+UCenter_1.6.0_SC_GBK这个程序组合.涉及到怎 ...

  3. IA-32e模式下的异常处理

    系统异常处理 CPU如果调用系统异常处理程序 需要的数据结构 IDT_Table: 中断向量表, 在中断向量表中的每一项都是一个中断描述符(中断门或者陷阱门), 一个中断描述符中的几位是段选择符 GD ...

  4. java学习第十五天

    1:对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. (2)案例: 用数组存储5个学生对象,并遍历数组. 2:集合(Collection ...

  5. C#多线程进度条

    public class ZyjProgressBar : System.Windows.Forms.ProgressBar { //用于跨线程访问控件的委托 private delegate voi ...

  6. EF删除数据

    1.方法一,面向对象 using (MyDbContent content = new MyDbContent()) { content.Entry<UserInfo>(model).St ...

  7. uml的十三种图形

    1.用例图:对系统的使用方式分类. 2.类图:显示类和它们的相互关系. 3.对象图:只显示对象及它们的相互关系. 4.活动图:显示人或对象的活动,其方式类似于流程图. 5.状态机图:显示生命周期比较有 ...

  8. Flex Validator的小BUG

    Flex中对同一控件如TextInput进行多种格式校验的情况下,如不注意,可能导致错误信息不显示的BUG,比如 <fx:Array id="validators"> ...

  9. Redis的原子自增性

    INCR key 将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类型,或字符串类型的值不能表示为数字,那 ...

  10. 微信小程序电商实战-商品列表流式布局

    今天给大家分享一下微信小程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~ 流式布局概念 流式布局也叫百分比布局 把元素的宽,高,margin,padding不再用固定数值,改用百分 ...