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. HDU 5336——XYZ and Drops——————【广搜BFS】

    XYZ and Drops Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  2. ASP .NET 404 Not Found fontawesome-webfont.woff?v=4.0.3

    解决Web部署 svg/woff/woff2字体 404错误最近项目中用到了fontawesome-webfont.svg等字体.部署项目后,发现没有<,+等符号,字体也不对,发现浏览器总是报找 ...

  3. ASP.NET Core后台任务

    之前在控制台程序中学习如何运行后台任务,ASP.NET Core中其实也有同样的方法BackgroundService,本以为跟HostedService没有区别,毕竟BackgroundServic ...

  4. Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍 (转)

    前言:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个跨平台 (Windows.Mac OSX.Linux) 的应用程序开发框架(Application Framew ...

  5. Dreams save us. Dreams lift us up and transform us into something better.

    Dreams save us. Dreams lift us up and transform us into something better.梦想能够拯救我们.梦想能够激励我们并让我们成为更好的人 ...

  6. ECMAScript Regex

    Everything has its own regulation by defining its grammar. ECMAScript regular expressions pattern sy ...

  7. python模块详解 XML

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

  8. 缺陷=bug?

    Defect(缺陷):是指静态处在于软件工作产品(文档.代码)中的错误,也指软件运行时由于这些错误被激发导致的软件产品与其属性的偏离现象. Bug:Bug通常是软件缺陷(Defect)导致的一些软件故 ...

  9. 笨办法学Python(十七)

    习题 17: 更多文件操作 现在让我们再学习几种文件操作.我们将编写一个 Python 脚本,将一个文件中的内容拷贝到另外一个文件中.这个脚本很短,不过它会让你对于文件操作有更多的了解. from s ...

  10. PHP : 封装跳转函数,实现三个页面的跳转

    具体实现:有a,b两个页面,一个跳转页面c,在a执行完后先进行c页面的提示,再跳转到b 1.文件设计: 2.c页面封装方法内容(function.php): a页面内容(a.html): a页面的后台 ...