GCPC 2018
题意:n个点,m条边组成的有向图,求任意两点之间的最长路径
dfs记忆化搜索
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
#include<vector>
#include<utility>
#include<map>
#include<queue>
#include<set>
#define mx 0x3f3f3f3f
#define ll long long
using namespace std;
int dis[],way[][],vis[],flag[];
int n,m;
int dfs(int x)
{
if(vis[x]==)
return dis[x];
for(int i=;i<=n;i++)
{
if(way[x][i]!=)
dis[x]=max(dis[x],dfs(i)+way[x][i]);//dis[x]表示以x为起点能走的最长路径是dis[x]
}
vis[x]=;
return dis[x];
}
int main()
{
cin>>n>>m;
for(int i=;i<m;i++)
{
int x,y,z;
cin>>x>>y>>z;
flag[y]=;//标记终点
if(way[x][y]!=)
way[x][y]=max(way[x][y],z);
else
way[x][y]=z;
}
int ans=;
for(int i=;i<=n;i++)//枚举搜索起点
{
if(flag[i]==)//给的是有向图,只能从有向图的起点开始搜索
ans=max(ans,dfs(i));
}
cout<<ans<<endl;
return ;
}
/*
5 5
1 2 15
2 3 12
1 4 17
4 2 11
5 4 9 6 6
1 2 2
4 5 2
2 3 3
1 3 2
5 6 2
1 2 4
*/
Gym - 102021D:Down the Pyramid
题意:给你一层数,让你求出它下面的一层数,上面的每一个数都是下层相邻两个数的和。(就像图中的数字金字塔一样)。问你下面一层有多少种满足的方案。
思路:假设给出的值为,a1,a2,a3,a3...,假设下面的第一个数b0=x,那么可以推得第二个数b1=a1-x,第三个数就是a2-(a1-x),以此类推。其中bo...bn要满足的条件就是每一项都大于等于零。所以就可推得关于x 的不等式,所以就可以求出x的一个最小的范围,所以就可求出方案数。
列出不等式,解x的范围
b1=a1-x>=0 x<=a1
b2=a2-(a1-x)>=0, x>=a1-a2
b3=a3-(a2-(a1-x))>=0 x<=a1-a2+a3
b4=a4-a3+a2-a1+x>=0 x>=a1-a2+a3-a4
奇数项<=的解取x得最小解
偶数项>=得解取x得最大解
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
#include<vector>
#include<utility>
#include<map>
#include<queue>
#include<set>
#define mx 0x3f3f3f3f
#define ll long long
using namespace std;
int n;
int a[];
int main()
{
int cnt=,num;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
int l=,r=mx,ans=;
for(int i=;i<=n;i++)
{
ans=a[i]-ans;
if(i%==)
r=min(r,ans);
else
l=max(l,-ans);
}
if(r>=l)
printf("%d\n",r-l+);
else
printf("0\n");
}
Gym - 102021E :Expired License
题意:给你一对浮点数,让你判断这对浮点数的比值能否用一对素数的比值所表示,如果可以就输出两个素数。
分析:首先将所给数转化成字符串处理(double转化成int数据会变化),两个数统一先乘以10^6化成整数,然后两数在除以他们的最大公因子判断是否为素数。其中里面包含一种特殊情况,就是当两数相等时,直接输出2,2
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
#include<vector>
#include<utility>
#include<map>
#include<queue>
#include<set>
#define mx 0x3f3f3f3f
#define ll long long
using namespace std;
const int maxn = 1e7 + ;
int prim[maxn], w[maxn], cnt = ;//prim[i]起标记作用,prim[i]==0表示i是质数
int x[maxn];//x[i]表示偶数是i的符合条件的两个质数是x[i]和i-x[i];
void init()
{
memset(prim, , sizeof(prim));
for (int i = ; i < maxn; i++)
{
if (prim[i]) //判断i是否为偶数
continue;
w[cnt++] = i;//w存质数
for (int j = i << ; j < maxn; j += i)//把所有质数的倍数标记
prim[j] = ;
} }
ll gcd(ll a, ll b)//最大公约数
{
return b == ? a : gcd(b, a % b);
}
string s1,s2;
int main()
{
int t;
cin>>t;
init();
prim[]=;
while(t--)
{
ll k1=,k2=,pos1=,pos2=;//先默认乘以10^6
cin>>s1>>s2;
int len1=s1.length();
int len2=s2.length();
for(int i=;s1[i];i++)
{
if(s1[i]!='.')
k1=k1*+(s1[i]-'');
else
pos1=len1-i-;
}
for(int i=;s2[i];i++)
{
if(s2[i]!='.')
k2=k2*+(s2[i]-'');
else
pos2=len2-i-;
}
while(pos1)
{
k1=k1*;
pos1--;
}
while(pos2)
{
k2=k2*;
pos2--;
}
if(k1==k2)
{
cout<<<<' '<<<<endl;
continue;
}
ll temp=gcd(k1,k2);
k1=k1/temp;
k2=k2/temp; if(prim[k1]==&&prim[k2]==)
cout<<k1<<' '<<k2<<endl;
else
cout<<"impossible"<<endl;
}
return ;
}
Gym - 102021F:Fighting Monsters
题意:给定N个怪兽,问能否选出两个怪兽,使得他们相互攻击,最后活着的怪兽剩1滴血,死的怪兽的血为零或者为负数。
题解:找规律,看在给定的n个数中,是否存在一组相邻的斐波那契数
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
#include<vector>
#include<utility>
#include<map>
#include<queue>
#include<set>
#define mx 0x3f3f3f3f
#define ll long long
using namespace std;
ll f[],vis[];//vis标记这个斐波那契数是否在n个数里面
map<ll,ll>m;//标记是否是斐波那契数
struct node
{
int x;
int pos;
}p[];
bool cmp(node a,node b)
{
return a.x<b.x;
}
void feibo()
{
f[]=;
f[]=,f[]=;
m[]=,m[]=;
for(int i=;i<=;i++)
{
f[i]=f[i-]+f[i-];
m[f[i]]=i;
if(f[i]>=)
break;
}
}
int main()
{
int n;
feibo();
// for(int i=0;f[i];i++)
// cout<<f[i]<<endl;
scanf("%d",&n);
int k=;
for(int i=;i<=n;i++)
{
int temp;
scanf("%d",&temp);
if(vis[temp]!=&&temp!=)//要把重复得数去掉,斐波那契数是除1以外是没有重复的
continue;
vis[temp]=i;
p[k].x=temp;
p[k].pos=i;
k++;
}
sort(p,p+k,cmp);
int flag=;
for(int i=;i<k;i++)
{
if(m[p[i].x]!=)
{
int pos=m[p[i].x];
if(p[i].x==p[i+].x)
{
cout<<p[i].pos<<' '<<p[i+].pos<<endl;
flag=;
break;
}
else if(vis[f[pos-]])
{
cout<<p[i].pos<<' '<<vis[f[pos-]]<<endl;
flag=;
break;
}
else if(vis[f[pos+]])
{
cout<<p[i].pos<<' '<<vis[f[pos+]]<<endl;
flag=;
break;
}
}
}
if(flag==)
cout<<"impossible"<<endl;
return ;
}
GCPC 2018的更多相关文章
- 2018 German Collegiate Programming Contest (GCPC 18)
2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...
- (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)
layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...
- German Collegiate Programming Contest 2018 B. Battle Royale
Battle Royale games are the current trend in video games and Gamers Concealed Punching Circles (GCPC ...
- 2018. The Debut Album
http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...
- Math.abs(~2018),掌握规律即可!
Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...
- 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版
肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版 下载链接: https://u253469.ctfile.com/fs/253469-229815828
- 2018年的UX设计师薪酬预测,你能拿多少?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 一个经验丰富的设计师完全可以根据地区和专业来可以预期薪酬之间的差距,其中悬殊最高可达80K. 本 ...
- Hello 2018, Bye 2017
2017年过去了,过去一年经历了太多,改变了好多好多,可以说人生进入了另一个阶段,有可能是成熟吧. 回顾2017 去年换了新工作,离开了将近工作了8年的公司,不带走一丝云彩,为其任劳任怨,最后没有任何 ...
- New Life With 2018
2017年转眼过去了.对自己来说.这一大年是迷茫和认知的一年.我的第一篇博客就这样记录下自己的历程吧 一:选择 从进入这一行到现在已经一年多了,2016年11月份就像所有的应届毕业生一样,都贼反感毕业 ...
随机推荐
- 【原】Docker学习_Docker上传镜像至docker hub(4)
构造镜像的两种方式:1.commit 2.Dockerfile Docker提供了一个docker commit命令,可以将容器的存储层保存下来成为镜像.换句话说,就是在原有镜像的基础上,再叠加上容 ...
- 树莓派4B踩坑指南 - (12)谷歌浏览器书签同步
书签和插件不能同步真的是不方便..使用时删掉※符号 过程比较复杂,坑很多,但确认有效 免费访问说明: https://github.com/max2max/fre※es※s 软件安装 https:// ...
- java编译问题之Description Resource Path Location Type Java compiler level does not match the version of
project 编译问题,需要三处的jdk版本要保持一致,才能编译通过. 1.在项目上右键properties->project Facets->修改右侧的version 保持一致 2. ...
- [原]用SQL比较两张结构完全相同的表数据
前几天面试遇到一个比较有意思的问题,就是有两张结构完全相同的表A和B,但是这两张表属于不同的业务流程,经过一段时间后发现两张表的数据不能完全匹配,有可能A比B多,也可能B比A多,或者两种可能同时存在, ...
- ios中时间倒计时
博客地址 https://github.com/sundayios/SQCountTimeDown.git
- SVM总结(参考源码ml.hpp)
如何使用,请查阅我的另一篇博客——SVM的使用 1.setType() SVM的类型,默认SVM::C_SVC.具体有C_SVC=100,NU_SVC=101,ONE_CLASS=102,EPS_SV ...
- broadcom sdk command
1.查看端口link状态 BCM.0>ps 2.查看vlan BCM.0>vlan show 3.查看pvlan BCM.0>pvlan show 4.CPU发包 BCM.0> ...
- python操作日志
# # import nnlog# my_log=nnlog.Logger('nhy.log',when='S',backCount=5)# my_log.debug('这是dedug')# my_l ...
- oracle SQL 练习
COURSE 表 DROP TABLE "SCOTT"."course"; CREATE TABLE "SCOTT"."cours ...
- tcp连接建立和断开
TCP协议作为传输层主要协议之一,具有面向连接,端到端,可靠的全双工通信,面向字节流的数据传输协议. 1.TCP报文段 虽然TCP面试字节流,但TCP传输的数据单元却是报文段.TCP报文段分为TCP首 ...