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. Bcrypt加密算法简介

    用户表的密码通常使用MD5等不可逆算法加密后存储,为防止彩虹表破解更会先使用一个特定的字符串(如域名)加密,然后再使用一个随机的salt(盐值)加密. 特定字符串是程序代码中固定的,salt是每个密码 ...

  2. Java自学-集合框架 ArrayList和LinkedList的区别

    ArrayList和LinkedList的区别 步骤 1 : ArrayList和LinkedList的区别 ArrayList ,插入,删除数据慢 LinkedList, 插入,删除数据快 Arra ...

  3. 读书笔记 - The Hitchhiker's Guide to Python

    网址 http://docs.python-guide.org/en/latest/ Reuqests库的作者写的经验 1. 项目需要一个好的结构 https://www.kennethreitz.o ...

  4. windows下创建/删除服务

    windows下创建/删除服务 1.      windows下创建/删除服务 1.1.    创建服务 命令格式: sc [servername] create Servicename [Optio ...

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:可滚动

    <!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...

  6. Caffe2 玩玩回归(Toy Regression)[5]

    前言 这一节将讲述如何使用Caffe2的特征进行简单的线性回归学习.主要分为以下几步: - 生成随机数据作为模型的输入 - 用这些数据创建网络 - 自动训练模型 - 查看梯度递减的结果和学习过程中网络 ...

  7. 1012 The Best Rank (25分) vector与结构体排序

    1012 The Best Rank (25分)   To evaluate the performance of our first year CS majored students, we con ...

  8. Netsparker破解版5.3 Netsparker Enterprise 5.3.0.24388[cracked]

    Netsparker破解版5.3 Netsparker Enterprise 5.3.0.24388[cracked]该版本更新时间为2019年7月8日下载地址:1 https://www.dr-fa ...

  9. 数学公式在 iOS 中的表示

    1. 三角函数  double sin (double);正弦  double cos (double);余弦  double tan (double);正切 2 .反三角函数  double asi ...

  10. Derivative Pricing_1_Black

    1. Stock Option wih divends 1.1 Task A 1.1.1 Calculate a ECO on a stock. /Ex-dividend dates in 3 and ...