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. LitJson(读Exce文件写入到json文件):

    读Exce文件写入到json文件汇总: //命名空间 using System.Collections; using System.Collections.Generic; using System. ...

  2. 百度 CDN公共库

    http://developer.baidu.com/wiki/index.php?title=docs/cplat/libs 简介 CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直 ...

  3. Docker学习笔记(2)-docker镜像操作

    本节将会涉及Docker的镜像操作. 1. 获取镜像 如何获取Docker Hub上的镜像?可通过docker pull命令获取,其格式为: docker pull [选项] [Docker Regi ...

  4. crypto-js遇到的坑

    最近在做H5网站,用websocket跟后台交互时,需要对数据进行加密,于是选了crypto-js组件,GitHub上api也不少,写的也清晰,但实际使用上会遇到不少坑: 加密解密时,传入的密钥key ...

  5. Javascript 对象(Object)

    //声明方式 //调用 Object构造函数创建 var user = new Object(); user.name = "小白"; user.say = function () ...

  6. 前台异步传过来的URL中获取token/获取string链接中的token

    1.链接例子: string url = "http://domainName:port/1/2/3/4.htm?sysCode=1001020&token=QXJzemR3YXlW ...

  7. Spring IOC + AOP 的实现

    Spring思想很不错,尽量减少侵入式编程.现在了解到的Spring提供的功能有,DI,IOC,数据库操作,AOP,MVC.针对DI,AOP写了一些小DEMO PS:AOP真的很棒 代码参考:< ...

  8. The ninth day

    a good egg 可不是好的鸡蛋的意思哦 它等同于 a good person 大好人的意思 eg: We all think he is a good egg. 我们都认为他是一个好人. I t ...

  9. python模块详解 XML

    XML模块 XML是实现不同语言或程序之间进行数据交换的协议,和json一样. XML格式: <?xml version="1.0" encoding="UTF-8 ...

  10. Struts2_HelloWorld1

    打开 eclipse,新建 web 项目. 因为可能需要 jstl 表达式,所以添加 jstl需要的jar包. 下载链接:http://pan.baidu.com/s/1hr6mBI0 将jar拷贝至 ...