C、Coolest Ski Route

题意: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的更多相关文章

  1. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...

  2. (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)

    layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...

  3. German Collegiate Programming Contest 2018​ B. Battle Royale

    Battle Royale games are the current trend in video games and Gamers Concealed Punching Circles (GCPC ...

  4. 2018. The Debut Album

    http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...

  5. Math.abs(~2018),掌握规律即可!

    Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...

  6. 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版

    肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版 下载链接: https://u253469.ctfile.com/fs/253469-229815828

  7. 2018年的UX设计师薪酬预测,你能拿多少?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   一个经验丰富的设计师完全可以根据地区和专业来可以预期薪酬之间的差距,其中悬殊最高可达80K. 本 ...

  8. Hello 2018, Bye 2017

    2017年过去了,过去一年经历了太多,改变了好多好多,可以说人生进入了另一个阶段,有可能是成熟吧. 回顾2017 去年换了新工作,离开了将近工作了8年的公司,不带走一丝云彩,为其任劳任怨,最后没有任何 ...

  9. New Life With 2018

    2017年转眼过去了.对自己来说.这一大年是迷茫和认知的一年.我的第一篇博客就这样记录下自己的历程吧 一:选择 从进入这一行到现在已经一年多了,2016年11月份就像所有的应届毕业生一样,都贼反感毕业 ...

随机推荐

  1. 【SSM - druid 】配置与使用

    web.xml 配置 <!-- druid的监控页面配置开始 --> <servlet> <servlet-name>StatViewServlet</ser ...

  2. CSRF预防手段

    1 referer 验证 2 token 验证

  3. Python开发个人专属表情包网站

    “表情包”是一种利用图片来表示感情的一种方式.表情包是在社交软件活跃之后,形成的一种流行文化,表情包流行于互联网上面,基本人人都会发表情. 曾经你是否也有过找不到表情包去应对别人的时候. 今天小编分享 ...

  4. Keras的TimeDistributed层

    Keras的TimeDistributed层主要用途是在时间维度上进行全连接. 比如Faster RCNN,1张图生成了16个ROI,需要对每一个ROI进行分类和回归,ROI的维度是7×7×512,长 ...

  5. T-SQL常用的函数

    http://blog.sina.com.cn/s/blog_4af01cd50100hsac.html

  6. Hibernate笔记一

    背景 jdbc的优缺点 A:直接操作底层,提供了简单,便捷的访问数据库方法,跨平台比较强,灵活,可以写很多赋值的SQL语句:是最底层的数据库操作,所以效率比较高,Sql语句可以自己选择写,采用效率最高 ...

  7. LUA拾翠

    一.函数 1.格式 optional_function_scope function function_name( argument1, argument2, argument3..., argume ...

  8. C++代码书写规范——给新手程序员的一些建议

    代码就是程序员的面子,无论是在工作中在电脑上写程序代码还是在面试时在纸上写演示代码我们都希望写出整洁,优雅的代码.特别在工作中当我们碰到需要维护别人的代码,或者是多人参与一个项目大家一起写代码的时候, ...

  9. github设置分支push权限

    1. 管理员身份登录GitHub,找到项目2. Settings-->Branches-->Protected branches--->Choose a branch... ,选择需 ...

  10. Java基础 -4.5

    循环控制 在循环语句定义的时候还有两个控制语句:break.continue break主要的功能是退出整个循环结构 continue严格来讲只是结束当前的一次调用(结束当前循环) 当执行到了cont ...