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月份就像所有的应届毕业生一样,都贼反感毕业 ...
随机推荐
- 学习笔记(5)- ubuntu对话语料
The Ubuntu Dialogue Corpus: A Large Dataset for Research in Unstructured Multi-Turn Dialogue Systems ...
- Nginx 反向代理报400错误解决方法!
如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败,报400错误,解决办法: ...
- iOS项目开发日常之创建文件(协议、类、分类、扩展)
iOS项目开发过程中,是以不断创建文件的形式进行着的. 创建得比较频繁的文件类型是: 这两个类型中创建的文件有:子类.分类.扩展.协议四种文件,如下: 这四类文件是频繁创建的,我们来看一下各自分 ...
- JS实现对对象的深拷贝
手动遍历对象拷贝 /** * 深拷贝 * @param {*} obj 拷贝对象(object or array) * @param {*} cache 缓存数组 */ function deepCo ...
- Linux下清空文件的3种方法
1.echo -n > test.log #-n选项可以去掉空行 2.cat /dev/null > test.log 3.truncate -s 0 test.log
- JavaWeb之过滤器
过滤器 什么是过滤器 1示意图: 过滤器的作用: 1.过滤器的作用好比一个保安.是servlet规范中的技术 2.用户在访问应用的资源之前或者之后,可以对请求做出一定的处理 编写过滤器步骤: 1.编写 ...
- 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...
- Linux命令:route命令
route显示或修改IP路由表 route -n:显示路由信息,使用数字格式显示,不反解地址到主机名 #route -n Kernel IP routing table Destination Gat ...
- Dynamic Programming(动态规划)
钢材分段问题 #include<iostream> #include<vector> using namespace std; class Solution { public: ...
- Windows下载编译Qt5 Gui
安装工具 Python 这个安装的时候没记录下来,网上查一下,大把, 就不补了. ActivePerl https://www.cnblogs.com/dilex/p/10591579.html 下载 ...