Egyptian Collegiate Programming Contest 2017 (ACM ECPC 2017) - original tests edition
题目链接:https://codeforces.com/gym/101856
D. Dream Team
题意:n个点,让你连边成为一棵树,边权为顶点的GCD(u,v)。求所有边权和的最大值。
思路:将每个数进行因数分解,从大的因子开始求最大生成树。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + ;
vector<int> G[maxn];
int far[maxn];
int n;
int find(int x)
{
if(far[x] == x) return x;
else return far[x] = find(far[x]);
}
void unite(int x, int y)
{
x = find(x);
y = find(y);
if(x == y) return ;
far[x] = y;
}
bool check(int x, int y)
{
return find(x) == find(y);
}
void init()
{
for(int i = ;i < maxn;i++)
{
far[i] = i;
G[i].clear();
}
}
long long kruskal()
{
long long ans = ;
for(int i = 1e5;i >= ;i--)
{
if(G[i].size() < ) continue;
else{
int u = G[i][];
for(int j = ;j < G[i].size();j++)
{
int v = G[i][j];
if(!check(v, u)){
ans += i;
unite(v, u);
}
}
}
}
return ans;
}
void gao(int x, int k)
{
int nn = sqrt(x);
for(int i = ;i <= nn;i++)
{
if(x % i == ){
if(i * i == x){
G[i].push_back(k);
}
else {
G[i].push_back(k);
G[x/i].push_back(k);
}
}
}
}
int main()
{
freopen("dream.in","r",stdin);
int t;
scanf("%d",&t);
for(int cas = ; cas <= t;cas++)
{
init();
scanf("%d",&n);
int x;
for(int i = ;i < n;i++){
scanf("%d",&x);
gao(x,i);
}
long long ans = kruskal();
printf("Case %d: ",cas);
printf("%lld\n",ans);
}
return ;
}
F. Forgot the Flag!
题意:给你一个凸多边形,给你俩个点在多边形内,问你从a点到多边形一条边上再到b点的最小距离以及和边界的交点。
思路:对于多边形每条边求点b的对称点,答案就是a到对称点的距离,然后求直线交。注意特判俩点重合并且在线上的时候。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
const double eps = 1e-;
double INF = 1e18;
int sgn(double x)
{
if(fabs(x) < eps) return ;
else return x < ? - : ;
}
struct Point{
double x, y;
Point(){}
Point(double _x,double _y)
{
x = _x,y = _y;
}
void input()
{
scanf("%lf %lf",&x, &y);
}
bool operator ==(const Point &b)const{
return sgn(x - b.x) == && sgn(y - b.y) == ;
}
bool operator <(const Point &b)const{
return sgn(x - b.x) == ? sgn(y - b.y) < : x < b.x;
}
Point operator -(const Point &b)const{
return Point(x - b.x, y - b.y);
}
double operator ^(const Point &b)const{
return x*b.y-y*b.x;
}
double operator *(const Point &b)const{
return x*b.x + y*b.y;
}
double len2(){
return x*x + y*y;
}
double distance(Point p){
return hypot(x-p.x,y-p.y);
}
Point operator + (const Point &b)const{
return Point(x+b.x,y+b.y);
}
Point operator * (const double &k)const{
return Point(x*k,y*k);
}
Point operator / (const double &k)const{
return Point(x/k,y/k);
} };
Point p[maxn];
struct line{
Point s, e;
line(){}
line(Point _s, Point _e)
{
s = _s,e= _e;
}
Point lineprog(Point p)
{
return s +(((e - s) * ((e - s)*(p - s)))/((e - s).len2()));
}
Point symmetrypoint(Point p)
{
Point q = lineprog(p);
return Point(*q.x - p.x, *q.y - p.y);
}
Point crosspoint(line v)
{
double a1 = (v.e - v.s) ^ (s - v.s);
double a2 = (v.e - v.s) ^ (e - v.s);
return Point((s.x*a2-e.x*a1)/(a2-a1),(s.y*a2-e.y*a1)/(a2-a1));
}
int relation(Point p){
int c=sgn((p-s)^(e-s));
if(c<) return ;
else if(c>) return ;
else return ;
}
};
int main()
{
int t;
freopen("flags.in","r",stdin);
scanf("%d",&t);
for(int cnt = ;cnt <= t;cnt++)
{
int n;
scanf("%d",&n);
for(int i = ;i < n;i++) p[i].input();
int q;
Point st, ed;
line l ;
Point a;
scanf("%d",&q);
printf("Case %d:\n",cnt);
while(q--)
{
st.input();
ed.input();
double ans = INF;
double d;
Point anspoint;
for(int i = ;i < n;i++){
l = line(p[i],p[(i+)%n]);
a = l.symmetrypoint(ed);
d = st.distance(a);
if(l.relation(ed) == && st == ed)
{
ans = ;
anspoint = st;
break;
}
if(sgn(d - ans) < ){
ans = d;
line r = line(st, a);
anspoint = l.crosspoint(r);
}
}
printf("%.7f %.7f %.7f\n",ans,anspoint.x,anspoint.y);
}
}
return ;
}
.G. Glorious Stadium
思路:推公式。
#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
int main()
{
int t;
freopen("glorious.in","r",stdin);
scanf("%d",&t);
for(int cas = ;cas <= t;cas++)
{
int n;
double r, k;
scanf("%d %lf %lf",&n, &r, &k);
printf("Case %d: ",cas);
double af = pi / k;
double c = /(cos(af)*cos(af));
double m = (1.0-pow(c,n))/(1.0-c);
double ans = (tan(af)*k - pi)*r*r*m;
printf("%.5f\n",ans);
}
return ;
}
J. Jacked Tickets
题意:将n个东西分成m份,每一种数量 i 对应 p[i] 的损失,问损失和最小多少。
思路:题目说p[i]满足凹函数的性质,那么可以贪心知道,对于每一份要尽可能的平均。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
ll a[maxn];
int main()
{
freopen("jacking.in","r",stdin);
int t;
scanf("%d",&t);
for(int cnt = ;cnt <= t;cnt++)
{
int n;
scanf("%d", &n);
for(int i = ;i <= n;i++)
{
scanf("%lld",&a[i]);
}
int q;
scanf("%d", &q);
ll x, y;
printf("Case %d:\n", cnt);
while(q--)
{
scanf("%lld %lld",&x, &y);
if(x < y){
printf("impossible\n");
}
else
{
ll num = x / y;
ll remain = x % y;
ll ans = a[num]*y - a[num]*remain;
ans += a[num + ]*remain;
printf("%lld\n",ans);
} }
}
return ;
}
K. Katryoshka
题意:给定a,b,c,由(2*a,b),(2*a,b,c),(a,b,c) 三种组成方法去构造一个模型,问最多构建几个模型。
#include<bits/stdc++.h>
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
freopen("katryoshka.in","r",stdin);
int t;
cin >> t;
for(int cnt = ;cnt <= t; cnt++)
{
int a, b, c;
cin >> a >> b >> c;
int k = min(a, b);
k = min(k, c);
int ans = k;
a -= k;b -= k;c -= k;
ans += min(a / , c);
cout << "Case " << cnt << ": " << ans << endl;
}
return ;
}
L. Lazy ERCD
签到题。
#include<bits/stdc++.h>
using namespace std; int main(){
freopen("lazy.in","r",stdin);
int T;
cin >>T;
for(int co = ; co <= T; co++){
int x;
cin >>x;
cout <<"Case "<<co<<": "<<x-<<endl;
}
}
Egyptian Collegiate Programming Contest 2017 (ACM ECPC 2017) - original tests edition的更多相关文章
- ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015)
A.Arcade Game(康拓展开) 题意: 给出一个每个数位都不同的数n,进行一场游戏.每次游戏将n个数的每个数位重组.如果重组后的数比原来的数大则继续游戏,否则算输.如果重组后的数是最大的数则算 ...
- ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015) G. It is all about wisdom (二分,单源最短路)
题意:有\(n\)个点,\(m\)条边,只有当你的智力值大于这条边的\(w\)才能走,问在花费不超过\(k\)的情况下,从\(1\)走到\(n\)的所需的最小智力值. 题解:这题比赛为什么没想出来呢? ...
- 2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) 题解
题目链接:http://codeforces.com/gym/101147 2017/8/27日训练赛,题目情况9/11,Rank 4/79. A. The game of Osho 题意:定义一个子 ...
- Egyptian Collegiate Programming Contest (ECPC 2015)
题目链接:https://vjudge.net/contest/155219#overview. A题,用全排列来找出比当前这个数字字典序还大的排列有几个,然后前缀和dp即可.据说可以康拓展开来快速找 ...
- Gym100814B Gym100814F Gym100814I(异或) ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology
今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧... Gym100814B 这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把 ...
- 2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16)
A.The game of Osho(sg函数+二项展开) 题意: 一共有G个子游戏,一个子游戏有Bi, Ni两个数字.两名玩家开始玩游戏,每名玩家从N中减去B的任意幂次的数,直到不能操作判定为输.问 ...
- Codeforces Gym100814 I.Salem-异或 (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
这个题就是二进制,找两个数相应的二进制相对应的位置上数不同的最多的个数.异或写就可以. 一开始还想麻烦了,找出来最大的偶数和最大的奇数,最小的偶数和最小的奇数,但是这样想考虑的不全.因为范围比较小,直 ...
- Codeforces Gym100814 F.Geometry (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
这个题真的是超级超级水啊,哈哈哈哈哈哈.不要被题面吓到,emnnn,就这样... 代码: 1 #include<iostream> 2 #include<cstring> 3 ...
- Codeforces Gym100814 B.Unlucky Teacher (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧... 这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把标准答案推出来. 因为 ...
随机推荐
- Python模块之pdfkit
1.安装依赖 pip install python-docx #Python下的Microsoft Word 2007工具 pip install PyPDF2 #Python下的PDF工具 pip ...
- ubuntu下mysql定时备份
一:ubuntu下自动备份mysql数据库 转载来源:https://jingyan.baidu.com/article/ab0b563097cabac15afa7dbc.html 1.创建保存备份文 ...
- 3、NumPy 数组属性
1.秩.维度 NumPy 数组的维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推. 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions ...
- [fw]linux测试工程介绍(Linux Test Project)
http://ltp.sourceforge.net/ Linux Test Project, 后台很硬,由SGI™ 发起, IBM维护,所以质量有保障. 里面介绍了很多工具,对于一般的基准测试应该是 ...
- 浅谈XML涉及到的常见技术(编写+解析)
xml:即可扩展标记语言,用于描述关系型数据,也经常用作软件的配置文件: 1,编写xml文档一般基于一个约束文档,该文档用于规定xml的书写规范,常用的约束技术有 (1)XML ...
- Springboot消除switch-case方法
Springboot消除switch-case方法 背景 最近,在使用springboot开发一个接口的时候,需要根据接收的请求事件类型,去执行不同的操作,返回不同的结果,基本逻辑如下: String ...
- django报错
报错: SyntaxError Generator expression must be parenthesized 问题原因: 由于django 1.11版本和python3.7版本不兼容, 2.0 ...
- Git--07 Gitlab备份与恢复
目录 Gitlab备份与恢复 01). 备份 02). 恢复 Gitlab备份与恢复 对gitlab进行备份将会创建一个包含所有库和附件的归档文件.对备份的恢复只能恢复到与备份时的gitlab相同 ...
- linux篇—Nginx反向代理负载均衡
一.环境准备 反向代理功能架构 3台web服务器,组建出web服务器集群 web01 10.0.0.7 172.16.1.7 web02 10.0.0.8 172.16.1.8 web03 10.0. ...
- [ES6]react中使用es6语法
前言 不论是React还是React-native,facebook官方都推荐使用ES6的语法,没在项目中使用过的话,突然转换过来会遇到一些问题,如果还没有时间系统的学习下ES6那么注意一些常见的写法 ...