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. 【原】rsync使用

    在使用jenkins当跳板机的场景下,有使用git pull 代码到jenkins机器后,需要将代码复制到另一台机器上,常用的复制命令有scp和rsync:现就使用到了rsync进行详解: rsync ...

  2. 如果谷歌浏览器突然打不开网页,而且显示:"网页可能暂时无法连接,或者它已永久性地移动到了新网址,返回ERR_TUNNEL_CONNECTION_FAILED",怎么办?用这个方法,亲试有效!!!

    打开cmd: 依次输入: ipconfig /flushdnsnbtstat –rnetsh int ip resetnetsh winsock reset 效果图 然后我的浏览器就能正常使用了,很有 ...

  3. Notepad++查看文本文件的总的字符数、GBK字节数、UTF8字节数

    如果其编码是 小结:UTF-8编码下,一个汉字占3字节,GBK编码下,一个汉字占2字节:

  4. Educational Codeforces Round 74 (Rated for Div. 2)E(状压DP,降低一个m复杂度做法含有集合思维)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;char s[100005];int pos[ ...

  5. row_number over ()排序函数

    语法: row_number () over (排序规则)  计算每一行数据在结果集的行数 select ROW_NUMBER() over (order by FSalary) as 排序 ,*  ...

  6. 解决centos7命令无法补全

    背景 偶然发现本地虚拟机centos 7.7配置firewalld-cmd命令行无法补全,手敲命令太多,着实麻烦 解决方案 安装linux命令行补全工具,还能够补全命令参数 yum install b ...

  7. requests 用法小速记

    Request库安装方法 Request官网 使用管理员权限启动 command控制台(win+X 命令提示符(管理员)) 使用pip安装requests库(默认配置好python以及pip的环境变量 ...

  8. 计算机网络 - TCP/IP模型

    图片来自网上资料

  9. 使用pyinstaller打包.py程序

    使用pyinstaller打包.py程序 例如打包D:/Desktop 目录下的 filename.py 文件 打开 cmd 将目录切换至 D:/Desktop 输入命令 pyinstaller -F ...

  10. js 中一些重要的字符串方法

    String 对象方法 方法 描述 charAt() 返回在指定位置的字符. charCodeAt() 返回在指定的位置的字符的 Unicode 编码. concat() 连接两个或更多字符串,并返回 ...