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)
今日份的训练题解,今天写出来的题没有昨天多,可能是因为有些事吧... 这个题就是老师改卷子,忘带标准答案了,但是他改了一部分卷子,并且确定自己改的卷子没出错,他想从改过的卷子里把标准答案推出来. 因为 ...
随机推荐
- 查找idt table 所對應的page table in Linux
#include <linux/kernel.h> #include <linux/module.h> #include <linux/types.h> #incl ...
- CodeChef Sereja and LCM(矩阵快速幂)
Sereja and LCM Problem code: SEALCM Submit All Submissions All submissions for this problem ar ...
- Java负整数的左移、右移、无符号右移
转自 Java负整数的左移.右移.无符号右移 Java负整数的左移.右移.无符号右移.正数的位移没有涉及到符号,而且正数的原码.反码.补码都是一样的,所以相对简单,但是对于负整数的位移,往往容易混淆 ...
- Spring bean相关
Spring中指定Bean的作用于的方式 以下四种为例: 单例(默认,可以不用特殊表明) @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) ...
- vue.js(8)--v-for的使用
v-for遍历数组.对象数组.对象.迭代次数 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 【记录】mysql查询语句对于为null和为空字符串给出特定值处理
SELECT if(IFNULL(filedName,"指定字符串")="","指定字符串",filedName) '重命名的字符名' FR ...
- 2018-2-13-WPF-延迟加载
title author date CreateTime categories WPF 延迟加载 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23:3 + ...
- SELECT - 从表或视图中取出若干行
SYNOPSIS SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] * | expression [ AS output_name ] [ ...
- 微信小程序(15)--上传图片公用组件(2)
接下来开始写写上传图片的公用组件,可以自定义上传几张图片. chooseImage文件夹里面的index.wxml和index.js,涉及图片上传,删除,预览. <view class=&quo ...
- Django组件——用户认证
用户认证 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1 .authentica ...