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)
今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧... 这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把标准答案推出来. 因为 ...
随机推荐
- vue使用vue-router beforEach实现判断用户登录跳转路由筛选
vue使用vue-router beforEach实现判断用户登录跳转路由筛选 :https://www.colabug.com/3306814.html 在开发webApp的时候,考虑到用户体验,经 ...
- BZOJ 1683.City skyline 城市地平线
传送门 从左到右扫一遍,考虑什么时候会和之前形成同一幢房子从而不用统计 显然是当前的高度和之前某个点高度相同,并且它们之间没有更矮的建筑 考虑用一个单调栈维护一个单调上升的房子轮廓,然后对于扫到的每一 ...
- C#面试 笔试题 四
1.请你简单的说明数据库建立索引的优缺点 使用索引可以加快数据的查询速度,不过由于数据插入过程中会建索引,所以会降低数据的插入.更新速度,索引还会占磁盘空间. 2.什么是WEB服务控件?使用WEB服务 ...
- vector中数据释放崩溃问题
struct LINE { char securityID[32]; /*!< 证券代码 */ int64_t dateTime; /*!< 日期时间(日期变化)YYYYMMDDhhmms ...
- MySQL对字段新增自增序列
现在有这样的场景,我们的数据库类型是MySQL,表是从其他库拿过来的,约束和索引都没迁移.现在希望增加一个自增序列. 且自增序列是从当前最大自增ID开始的,下面就是这样一个过程的演示. mysql&g ...
- ROT13加密和解密
问题 ROT13(回转13位)是一种简易的替换式密码算法.它是一种在英文网络论坛用作隐藏八卦.妙句.谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥.ROT13 也是过去在古罗马开发的凯撒 ...
- 更新252板子代码(前端+cgi中间件)
1.前端代码 前端的html.css.js代码,利用打包工具生成dist文件夹,放入lighttpd的指定目录. 2.cgi中间件 1)编译 1.下载代码工程V100R100C00 2.将工程代码以共 ...
- 记一次sql索引颠覆认知
首先先建立数据库和插入数据 我们要查询的命令如下,前提是以mysql数据库为准 , 结果和我想的不太一样,先准备好环境和所需的数据库和表 准备阶段 CREATE TABLE `test` ( `id` ...
- html5 jquery音乐播放器,play()和pause()不起作用
今天在自己写的页面上加上背景音乐,当我点击图片时可以切换 播放/暂停 用jquery写的,方法总是提示没有pause这个方法! 检查了半天最后发现 你使用的是jquery选择器所以返回的是jquery ...
- java类的加载与初始化
https://blog.csdn.net/u013349237/article/details/71076617 1在命令行启动虚拟机jvm进行加载, 2用class.forname()方法进行动态 ...