HPU第一次团队赛
D. Tom的战力问题
Tom被斯派克揍了TAT。
Tom下定决心要战胜斯派克。
但是在战胜最强的斯派克之前,Tom要先打败其他的狗。为此,他打算先收集一下信息。
现在Tom在了得到了一些关于战斗力的小道消息,例如X号狗狗的战力比Y号狗狗的战力高S点。
Tom想知道利用这些消息,能不能判断出某两只狗之间的战力高低?高多少?
输入格式
第一行包含三个整数N,M和Q。N表示狗总数,M表示Tom知道消息的总数,Q表示小Tom想询问的数量。
以下M行每行三个整数,X,Y和S。表示X号狗的战力比Y号狗的战力高S点。
以下Q行每行两个整数,X和Y。表示Tom想知道X号狗的战力比Y号狗的战力高几点。
2≤N≤1000
1≤M,Q≤N
1≤X,Y≤N
−1000≤S≤1000
数据保证没有矛盾。
输出格式
对于每个询问,如果不能判断出X比Y高几点输出−1。否则输出X比Y高多少战力点。
样例
10 5 3
1 2 10
2 3 10
4 5 -10
5 6 -10
2 5 10
1 10
1 5
3 5
-1
20
0
其实就是一个简单的BFS问题。题目中问两个狗之间的站力相差多少,我们可以看成路径问题即A到B的距离为C,B到A的距离为-C,然后跑图,不可到大的话输出-1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N=1e3+;
int n,m,q; struct stu{
int a,b;
};
vector<stu >ve[N];
int mark[N];
bool check=false ;
int f=-; void bfs(int x,int y){
memset(mark,,sizeof(mark));
queue<stu >que;
que.push({x,});
mark[x]=;
while(que.size()){
stu aa=que.front();
que.pop();
// cout<<aa.a<<endl;
if(aa.a==y){
f=aa.b;
break;
}
for(int i=;i<ve[aa.a].size();i++){
if(mark[ve[aa.a][i].a]==){
mark[ve[aa.a][i].a]=;
que.push({ve[aa.a][i].a,aa.b+ve[aa.a][i].b});
}
}
}
} int main(){
scanf("%d%d%d",&n,&m,&q);
int x,y,z; for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
ve[x].push_back({y,z});
ve[y].push_back({x,-z});
} while(q--){
f=-;
int x,y;
scanf("%d%d",&x,&y);
bfs(x,y);
printf("%d\n",f);
} return ;
}
E Tom的函数求值
众所周知,Tom不会递归,但是今天他突然顿悟了!并且凭借自己的能力写出了下面这段代码:
int F(int m,int n)
{
if(!m)
return n+1;
if(!n&&m)
return F(m-1,1);
if(m&&n)
return F(m-1,F(m,n-1));
}
现在,他想让你根据这个函数来解决问题
输入格式
单组输入,每组一行,有两个整数m和n(0≤m≤3,0≤n≤27)
输出格式
请输出上面代码的运行结果
样例
1 1
3
0 1
2
提示
如果不知道怎么做的话,不妨试试直接把代码复制粘贴进去吧٩̋(ˊ•͈ ꇴ •͈ˋ)و
对于这种类型的题目,我们可以先运行一下它给出的代码,然后输出一些值,在找规律。
//int F(int m,int n)
//{
// if(!m)
// return n+1;
// if(!n&&m)
// return F(m-1,1);
// if(m&&n)
// return F(m-1,F(m,n-1));
//}
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
// m==0 n+1;
// m==1 2 3 4
// m==2 3 5 7
// m==3 5 13 29
ll f(ll x){
if(x==) return ;
else return *f(x-)+;
}
int main(){
ll a,b;
scanf("%lld %lld",&a,&b);
if(a==) printf("%d",b+);
else if(a==) printf("%d\n",b+);
else if(a==) printf("%d\n",*b+);
else if(a==) printf("%lld\n",f(b));
return ;
}
FTom的约会
XX协会又要迎来新的成员了。
这次的妹子颇多,足足有n人之多(1≤n≤106),她们每个人的学号都是1018 内的一个正整数。
Jerry 早早地就掌握了她们每个人的学号,并且知道她们之中有一个人和Tom约会去了!
Jerry 统计了在场所有妹子的学号,他想知道,哪个人没来?
输入格式
第一行是一个整数n,代表一共有n只妹纸
以下n行每行一个整数,代表每只妹纸的学号
接下来一个空行
以下n−1行每行一个整数,代表每只来了的妹纸的学号
输出格式
输出没来的妹纸的学号。
样例
3
10061061
10061023
10061201 10061023
10061201
10061061
提示
开头别想着抢一血,稳着跟榜做题,很多队伍过的题自己卡住了别慌,肯定不是特别难的算法,多换几个思路,上个厕所调整一下状态,总之,心态要好~
~~ 以上都是废话 ~~
看到这个题目,觉得用map比较好,但是TLE了,,用map没TLE的是卡过去的,这里可以开个两个数组,存完值后进行排序,找到第一个不向等的,就可以退出了,
也可以用无序字典
代码1:
#include<iostream>
#include<cstdio>
#include<unordered_map>
using namespace std;
typedef long long ll;
unordered_map<ll,int >mp;
unordered_map<ll,int>::iterator it;
int main(){
int t;
cin>>t;
int t1=t-;
while(t--){
ll x1;
scanf("%lld",&x1);
mp[x1]++;
}
while(t1--){
ll y;
scanf("%lld",&y);
mp[y]++;
}
for(it=mp.begin();it!=mp.end();it++){
if(it->second==){
printf("%lld\n",it->first);
break;
}
}
return ;
}
代码2:
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int N=1e6+;
ll p[N];
ll p2[N];
int main(){
int t;
scanf("%d",&t);
ll x;
for(int i=;i<=t;i++){
scanf("%lld",&p[i]);
}
for(int i=;i<=t-;i++){
scanf("%lld",&p2[i]);
}
sort(p+,p++t);
sort(p2+,p2+t);
bool f=false ;
for(int i=;i<=t-;i++){
if(p[i]!=p2[i]){
f=true;
printf("%lld",p[i]);
break;
}
}
if(!f) printf("%lld",p[t]); return ;
}
G. Tom爬楼梯
Jerry 跑到了二楼,现在Tom面临的是一个n阶的楼梯,由于Tom的腿比较短,因此它一次只能爬1阶或2阶,机智的Jerry破坏掉了m阶楼梯,也就是说Tom无法踩在这m阶楼梯上,现在Tom想知道他有多少种方案能爬到第n阶楼梯。由于答案很大,输出方案数对109+7取模的结果。
输入格式
第一行输入一个T代表有T组输入,对于每组输入:
第一行输入n,m,第二行输入m个数,第i个数ai代表第ai阶楼梯被破坏了。
(1≤T,m≤10,1≤n≤1000,1≤ai≤n)。
输出格式
对于每组输入,输出方案数对109+7取模的结果。
样例
3
1 1
1
8 1
1
10 2
1 2
0
13
0
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+; ll dp[+];
ll arr[+];
ll arr2[+]; void inint(){
dp[]=;
dp[]=;
for(int i=;i<=;i++){
dp[i]=(dp[i-]%mod+dp[i-]%mod)%mod;
}
} int main(){
inint();
int t;
cin>>t;
while(t--){
ll a,b1;
scanf("%lld%lld",&a,&b1);
for(int i=;i<=b1;i++){
scanf("%lld",&arr[i]);
}
sort(arr+,arr++b1);
// if(arr[b1]==a){
// puts("0");
// continue ;
// }
int pos=;
arr2[pos++]=arr[];
for(int i=;i<=b1;i++){
arr2[pos++]=arr[i]-arr[i-]-;
}
arr2[pos++]=a-arr[b1];
ll ans=;
for(int i=;i<pos;i++){
ans=(ans%mod*dp[arr2[i]]%mod)%mod;
}
cout<<ans<<endl;
} return ;
}
I. Jerry的数学题
Tom自称是数学天才,无法忍受的Jerry 给 Tom 出了一道题,已知a,b,求解下列方程:
Tom顿时傻眼了,现在只有你能来帮他挽回颜面了,快来帮帮它吧。
输入格式
第一行输入一个T代表有T组输入。
每组输入包含两个正整数a,b。
(1≤T≤100,1≤a,b≤10000)
输出格式
对于每组输入,每行输出一组x,y,如果有多组,则输出x最小的,x,y中间用空格隔开。如果无解输出−1。
样例
3
100 50
3 3
6 7
50 100
3 3
-1
#include<bits/stdc++.h>
using namespace std; int main(){
int t;
scanf("%d",&t);
while(t--){
int a,b;
scanf("%d%d",&a,&b);
int x=a*b;
bool check=false ;
for(int i=b;i<=a;i+=b){
int y=x/i;
if(x%i==&&__gcd(i,y)==b){
check=true;
if(y<i) swap(y,i);
printf("%d %d\n",i,y);
break ;
}
}
if(!check) puts("-1");
} return ;
}
J. Jerry的题
Jerry给Tom出了一道题,题目是这样的:
**给出一棵n个节点的树,节点编号为1-n(根节点编号为1),每一个节点作为根节点与他所有的子孙节点形成一棵子树,而这棵子树包含节点的数量,称作子树的Size。
例如:
1─2─4─5
└─3
其中节点5的子树只包括节点5,Size = 1。节点4的子树包括节点4,5,Size = 2。节点1的子树包括节点1,2,3,4,5,Size = 5。
求以所有节点为根的子树的Size之和。上面例子中,节点1到5,对应的Size分别为5,3,1,2,1,所有Size的和 = 5 + 3 + 1 + 2 + 1 = 12
输入格式
第一行:1个数n(1 < n <= 10000),表示树的节点数量。
后面n-1行:每行2个数x y,表示节点x是节点y的父节点(1 <= x, y <= n)。
输出格式
输出1个数,表示以所有节点为根的子树的Size之和。
样例
4
1 2
1 3
2 4
8
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N=1E5+;
vector<int >ve[N];
int step[N];
bool mark[N];
int ans=;
void bfs(int x){
memset(mark,,sizeof(mark));
queue<int>que;
que.push(x);
mark[x]=;
step[x]=;
// cout<<"x:"<<x<<endl;
while(que.size()){
int t=que.front();
que.pop();
for(int i=;i<ve[t].size();i++){
// cout<<ve[t][i]<<"++"<<endl;
// ans++;
if(mark[ve[t][i]]==){
ans++;
mark[ve[t][i]]=;
step[ve[t][i]]=step[t]+;
que.push(ve[t][i]);
}
}
}
} int main(){
int t;
cin>>t;
int x,y;
for(int i=;i<=t-;i++)
{
cin>>x>>y;
ve[x].push_back(y);
}
long long sum=;
for(int i=;i<=t;i++){
ans=;
bfs(i);
sum+=1ll*ans;
}
cout<<sum<<endl;
return ;
}
L. Jerry的食粮
公元9102年,Tom不再追逐Jerry,因为Tom的主人已经从China进口了很多猫粮,并且还有了智能抓老鼠机器。
小Jerry无处可躲,只能露宿街头。Tom不再缺乏食粮,但是可怜的小Jerry仍然还饥肠辘辘。
这一天,小Jerry实在是饿坏了,再不吃点儿东西,他可能就横死街头了,于是,他想到了他的老朋友Tom,
Tom这个糟老头子可是坏得很呀,他给小Jerry出了一个问题,做出来这个问题,小Jerry就能获得糟老头子Tom
赞助的补给!!!只有伟大的团队可以帮得了Jerry,并将获得荣耀之光,你们能帮可怜的Jerry获得补给吗?
给定一个正整数n,求至少两个正整数使得他们的lcm(最小公倍数)为n,且这些正数的和最小,输出这个最小和。
输入格式
第一行一个整数T(1≤T≤1e4)
接下来T行,每行一个正整数n(1≤n≤231−1)
输出格式
输出T行,每行输出”Case #: “(不包括“”),#表示第#组数据,后面跟题目要求的答案,具体输出可参考样例
样例
3
12
10
5
Case 1: 7
Case 2: 7
Case 3: 6
分解质因子,然后记录每个质因子构成的值,最后累加就好了,但是注意,,如果他的质因子个数只有一个,或者他是质数的话直接输出n+1
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=1e6+;
int prime[N]={,,};
ll pre[N];
void f_prime(){
int sum=;
for(int i=;i<=N;i++){
if(prime[i]==){
pre[sum++]=i;
for(int j=i+i;j<=N;j+=i){
prime[j]=;
}
}
}
} int main(){
f_prime();
int t;
int k=;
cin>>t;
while(t--){
k++;
ll n;
scanf("%d",&n);
ll n1=n;
printf("Case %d: ",k);
if(n==){
printf("2\n");
continue ;
}
ll m=sqrt(n+);
ll ans=;
int x=;
for(int i=;pre[i]<=m;i++){
ll sum=;
if(n%pre[i]==){
x++;
while(n%pre[i]==){
sum*=pre[i];
n/=pre[i];
}
ans+=sum;
}
}
if(n>){
x++;
ans+=n;
}
if(x>) {
printf("%lld\n",ans);
}
else {
printf("%lld\n",+n1);
}
}
return ;
}
HPU第一次团队赛的更多相关文章
- 2018.10.19浪在ACM 集训队第一次测试赛
2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
- No.100_第一次团队会议
任务的确立 这次会议,我们的主要目标是确定任务: 我们的任务有以下几个选择: 学霸网站,这个项目拥有以前的前端代码,我们再使用Django后端服务.上手难度较低,环境较好. 多平台时间管理软件. 安卓 ...
- Hello Build To Win!我们是奶牛小分队!——记第一次团队作业
Hello Build To Win!我们是奶牛小分队! section 1 组建团队 1. 队员介绍: 姓名 学号 风格 擅长技术 编程兴趣 希望软工角色 吴建瑜 2016012024 努力学习, ...
- 长大DeepMind第一次团队作业
1.队名 长大DeepMind 2.队员风采 学号 姓名 擅长的技术 编程的兴趣点 希望承担的角色 一句话宣言 B20150304508 晏司举 JAVA,ssm框架,MySQL数据库 JAVA后台服 ...
- 第一次团队合作,对Scrum的初步了解
学习和运用scrum 作为长大的大三老腊肉,我们已经在长大生活了两年多,对于什么是长大人最想完善的校园需求.最想拥有的校园服务媒介也有了更加深切的体会. 于是,GoodJob小团队blingbling ...
- 第一次团队Scrum
长大一条龙之成绩查询 一.项目介绍 本项目的意义在于锻炼团队的scrum能力,加强团队合作能力.确定本项目采用的 ...
- [2019BUAA软工]第一次团队作业
Team V1 团队启动 BUAA Team V1 于2019年3月正式成立,将开始为期四个月的合作. 队员介绍 Name Summary Sefie wxmwy V1-bug制造公司资深工程师精 ...
- 牛客假日团队赛2 C 修围栏 ( 哈夫曼树,贪心)
链接:https://ac.nowcoder.com/acm/contest/924/C 来源:牛客网 修围栏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
随机推荐
- ShedLock-jdbc配置锁
项目初期为了快速响应业务开发,对于部分业务需要使用到定时任务功能模块,会直接嵌入到主流程代码中间.当业务增加,发展成分布式服务时,那些定时任务对整体而言重复执行.如果避免分布式服务中的定时任务单一执行 ...
- ubuntu 16.04配置svn服务器
为了操作方便,使用root登录服务器. 一.安装svn服务器 -->apt-get install subversion 二.创建svn版本库,存放需要管理内容路径 -->mkdir sv ...
- springboot创建
1.点击File----->New----->Project... 2.输入MAVEN,组名.包名等相关参数 3.选择SpringBoot版本,选择项目需要依赖的相关骨架包 4.设置 ...
- 从源码学习Java并发的锁是怎么维护内部线程队列的
从源码学习Java并发的锁是怎么维护内部线程队列的 在上一篇文章中,凯哥对同步组件基础框架- AbstractQueuedSynchronizer(AQS)做了大概的介绍.我们知道AQS能够通过内置的 ...
- OpenCV-Python 图像阈值 | 十五
目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值. 你将学习函数cv.threshold和cv.adaptiveThreshold. 简单阈值 在这里,问题直截了当.对于每个像素,应用相同 ...
- 解决GPU显存未释放问题
前言 今早我想用多块GPU测试模型,于是就用了PyTorch里的torch.nn.parallel.DistributedDataParallel来支持用多块GPU的同时使用(下面简称其为Dist). ...
- Word文档转html并提取标题
最近做了一个功能,需要将word文档转化成html的格式,并提取出标题生成导航.考虑到功能的复杂程度,将需要降低为对“标题1”这种格式进行提取. docx为后缀的文档(word2007)支持XML的文 ...
- flask中 多对多的关系 主从表之间的的增删改查
# 角色表模型class Role(db.Model): r_id = db.Column(db.Integer, primary_key=True) r_name = db.Column(db.St ...
- python class类的属性应用及init初始化实践 ---勇者斗恶龙
最近在熟悉python的基础语法,刚好老师布置了个课后作业感觉挺有意思的,就记录下来了学习过程. 题目如下: 刚拿到题目就想到了init 初始化属性,还列了下思路:(ps:notepad++写的比较糙 ...
- MySQL 数据备份与同步
前段时间使用MySQL作为数据存储做了一个小项目.项目上线运行了几十天之后,数据已经越来越多,达到了100多M.用mysqldump每天备份全量数据然后传输到另外一台机器上这种方式进行数据备份,久而久 ...