2017-2018 ACM-ICPC Asia East Continent League Final (ECL-Final 2017) Solution
A:Chat Group
题意:给出一个n, k 计算C(n, k) -> C(n,n) 的和
思路:k只有1e5 反过来想,用总的(2^ n) 减去 C(n, 0) -> C(n, k - 1), 预处理逆元,
#include <bits/stdc++.h> using namespace std; #define ll long long
#define N 100010 const ll MOD = (ll)1e9 + ; int t;
ll n, k;
ll inv[N]; inline void Init()
{
inv[] = ;
for (int i = ; i < N; ++i) inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD;
} inline ll qpow(ll x, ll n)
{
ll base = x;
ll ans = ;
while (n)
{
if (n & ) ans = (ans * base) % MOD;
base = base * base % MOD;
n >>= ;
}
return ans;
} int main()
{
Init();
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
scanf("%lld%lld", &n, &k);
printf("Case #%d: ", kase);
if (k > n)
{
puts("");
continue;
}
ll ans = qpow(, n);
ll tmp = ;
for (int i = ; i < k; ++i)
{
ans = (ans - tmp + MOD) % MOD;
tmp = tmp * (n - i) % MOD * inv[i + ] % MOD;
}
printf("%lld\n", ans);
}
return ;
}
B:Scapegoat
题意: 给出n件错误,每件错误的严重程度是ai, 有m只替罪羊,每只替罪羊只能承担一件事情的责任,如果多只替罪羊承担一件事情的责任,那么就是这多只替罪羊平均分担这件事情的责任,求每只替罪羊承担责任的方差
思路:当替罪羊总量固定的时候,那么平均值也是固定的,那么我们可以根据减少量排序,每次贪心取最大
#include <bits/stdc++.h>
using namespace std; #define N 200010 double ave; struct node
{
int num;
double tot, cur, dis, gap;
inline bool operator < (const node &r) const
{
return gap < r.gap;
}
inline node() {}
inline node(double _tot, int _num, double _cur)
{
tot = _tot; num = _num; cur = _cur;
dis = (cur - ave) * (cur - ave) * num;
gap = dis - ((tot / (num + ) - ave) * (tot / (num + ) - ave)) * (num + );
}
}; int t, n, m;
double arr[N]; inline void Run()
{
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
printf("Case #%d: ", kase);
scanf("%d%d", &n, &m);
ave = ;
for (int i = ; i <= n; ++i) scanf("%lf", arr + i), ave += arr[i]; ave /= m;
priority_queue <node> q;
for (int i = ; i <= n; ++i)
q.emplace(arr[i], , arr[i]);
for (int i = n + ; i <= m; ++i)
{
node top = q.top(); q.pop();
q.emplace(top.tot, top.num + , top.tot / (top.num + ));
}
double ans = ;
for (int i = ; i <= n; ++i)
{
node top = q.top(); q.pop();
ans += top.dis;
}
ans /= m;
printf("%.10f\n", ans);
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run(); return ;
}
C:Traffic Light
题意:给出两个红绿灯之间的时间以及每个红绿灯的红扥和绿灯时间,求最小的最坏情况。
思路:当经过一个红灯的时候可以发现,可以通过调整OFFi来保证接下来都是绿灯,所以答案就是最大的红灯时间和路程
#include<bits/stdc++.h> using namespace std; #define N 1010 double sum;
int n; int main()
{
int t;
scanf("%d", &t);
for(int cas = ; cas <= t; ++cas)
{
scanf("%d", &n);
sum = ;
for(int i = ; i <= n; ++i)
{
double x;
scanf("%lf", &x);
sum += x;
}
double tmp = ;
for(int i = ; i <= n; ++i)
{
double a, b;
scanf("%lf %lf", &a, &b);
tmp = max(tmp, b);
}
sum += tmp;
printf("Case #%d: %.10f\n", cas, sum);
}
return ;
}
D:Mr. Panda and Geometric Sequence
留坑。
E:Snakebird
留坑。
F:Good Number
留坑。
G:Image Recognition
留坑。
H:Mr. Panda and Birthday Song
留坑。
I:PLAYERUNKNOWN'S BATTLEGROUNDS
留坑。
J:Straight Master
题意:给出n种牌的数量,你可以打出长度为3,4,5的顺子,问最后能否打完。
思路:345可以拼凑出所有大于等于3的数字。先构造出差分约束,将每一个正值贪心的与最近的负值匹配,贪心扫一遍即可
#include<bits/stdc++.h> using namespace std; const int maxn = 2e5 + ; int n;
int arr[maxn];
int brr[maxn]; int main()
{
int t;
scanf("%d", &t);
for (int cas = ; cas <= t; ++cas)
{
scanf("%d", &n);
for (int i = ; i <= n; ++i)
{
scanf("%d", arr + i);
}
arr[n + ] = ;
for (int i = ; i <= n + ; ++i)
{
brr[i] = arr[i] - arr[i - ];
}
bool flag = true;
int now = ;
for (int i = ; i <= n + ; ++i)
{
while (brr[i] < && now <= i - )
{
if (brr[now] + brr[i] >= )
{
brr[now] += brr[i];
brr[i] = ;
}
else
{
brr[i] += brr[now];
brr[now] = ;
}
if (brr[i] < ) ++now;
}
if (brr[i] < )
{
flag = false;
break;
}
}
printf("Case #%d: %s\n", cas, flag ? "Yes" : "No");
}
return ;
}
K:Downgrade
题意:给出一个游戏里面,有主等级以及副等级,如果有一天没有打,那么它的等级就将主等级当成副等级,副等级满了可以生主等级
思路:虽然n很大,然后a只有1e5,可以知道最多下降到1-1就不会再变,然后二分找对应的主等级
#include<bits/stdc++.h> using namespace std; const int N = +;
long long la[N],f[N];
int main() {
long long t,p,i,j,l,r,k;
long long a,b,x,y,n,m;
scanf("%lld",&t);
p=;
f[]=;
while (t--) {
++p;
scanf("%lld%lld%lld",&a,&b,&n);
for (i=;i<=a;++i) {
scanf("%lld",&la[i]);
f[i]=f[i-]+la[i];
}
x=a; y=b;
while (n--)
{
long long prex = x,prey = y;
int pos = lower_bound(f + , f + + a, x) - f;
y = x - f[pos - ]; x = pos;
if(x == prex && y == prey) break;
if(x == && y == ) break;
}
printf("Case #%lld: %lld-%lld\n",p,x,y);
}
return ;
}
L:SOS
题意:给出n个格子,两个人轮流放'S' 或者 'O' 如果一个人放了之后,棋盘上出现"SOS" 它就赢了,Panda先手,求胜负关系或者平局
思路:有一个规律,当出现S__S 这样的局面的时候,谁第一步走进这个坑,谁就输了
找一下规律,16(lts)是一个分界点
#include <bits/stdc++.h> using namespace std; int t, n; int main()
{
scanf("%d", &t);
int d = ;
for (int kase = ; kase <= t; ++kase)
{
printf("Case #%d: ", kase);
scanf("%d", &n);
if (n < )
puts("Draw");
else if (n < d)
puts((n & ) ? "Panda" : "Draw");
else
puts((n & ) ? "Panda" : "Sheep");
}
return ;
}
M:World Cup
水。
#include <bits/stdc++.h> using namespace std; #define ll long long int t, n;
ll price[]; int main()
{
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
for (int i = ; i <= ; ++i) scanf("%lld", price + i);
scanf("%d", &n);
ll ans = ;
for (int i = , num; i <= n; ++i)
{
scanf("%d", &num);
if (num >= && num <= ) ans += price[];
else if (num >= && num <= ) ans += price[];
else if (num >= && num <= ) ans += price[];
else if (num >= && num <= ) ans += price[];
else ans += price[];
}
printf("Case #%d: %lld\n", kase, ans * );
}
return ;
}
2017-2018 ACM-ICPC Asia East Continent League Final (ECL-Final 2017) Solution的更多相关文章
- The 2017 ACM-ICPC Asia East Continent League Final记录
首先感谢tyz学弟的麻麻-给我们弄到了名额- 然后就开始了ACM ECLFinal的玩耍,A*仙人掌可是立了flag要好好打的- 试机赛好像就全是GCJ kickstart的原题,然后AK了但是由于一 ...
- Codeforces Gym 101775D Mr. Panda and Geometric Sequence(2017-2018 ACM-ICPC Asia East Continent League Final,D题,枚举剪枝)
题目链接 ECL-Final 2017 Problem D 题意 给定$2*10^{5}$组询问,每个询问求$l$到$r$之间有多少个符合条件的数 如果一个数小于等于$10^{15}$, 并且能被 ...
- 训练20191005 2017-2018 ACM-ICPC Asia East Continent League Final
A 签到 M 签到 K 读懂后签到 L 博弈论 [引理]出现SXXS结构时后手必胜. 很容易发现n为奇数时后手不可能胜利,n为偶数时先手不可能胜利.n≤6时一定平局,n≥7时先手有可能胜利,n≥16时 ...
- 2017 ACM/ICPC Asia Regional Shenyang Online spfa+最长路
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- 2017 ACM ICPC Asia Regional - Daejeon
2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...
- 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest
2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest A - Arranging Wine 题目描述:有\(R\)个红箱和\(W\)个白箱,将这 ...
- 2017 ACM/ICPC Asia Regional Qingdao Online
Apple Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submi ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp
QSC and Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online
Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...
随机推荐
- Linux 下安装 Python3
Linux CentOS 7 安装 Python3: [root@localhost ~]$ yum install -y epel-release [root@localhost ~]$ yum i ...
- C++预处理和头文件保护符
一预处理 1.常见的预处理功能 预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有:文件包含,条件编译.布局控制和宏替换4种.文件包含:#include 是一种最为常 ...
- cocos2d-x游戏引擎核心之十——网络通信
一.建立基本的http通信并得到返回信息 1.创建cocos2dx工程 2.项目引用外部库 如果要使用cocos2dx的CCHttpClient来进行网络访问,则需要引入cocos2dx的相关库,详细 ...
- ubuntu安装TexturePicker
TexturePacker网页:https://www.codeandweb.com/texturepackerTexturePacker下载页面:https://www.codeandweb.com ...
- Swift-'as?','as'用法
何时使用 'as?'和'as' 让我们来继续为我们假象的UIKit应用写点代码.假设你需要出场(展示)一个新的modal view controller到手机的屏幕上(比如通过使用presentVie ...
- Extjs6.2.0搭建项目框架
1.安装 首先你总要去官网下载ext-6.2.0-gpl.zip和安装Sencha CMD工具来管理ExtJs项目,ext-6.2.0-gpl.zip下载完成解压先放在一边,一会用到. Sencha ...
- 转移wordpress到另一台主机
做项目的代码是两个人,我想把另一个小伙伴做的转移到自己的linux系统上(主要是linux下一片空白,从头做太浪费时间了) 这个过程其实也可以用来类比从本地到服务器的过程(可能略有不同,真上线的时候会 ...
- 图论之最短路径(2)——Bellman-Ford算法
继续最短路径!说说Bellman—Ford算法 思路:假设起点为s,图中有n个顶点和m个边,那么它到任一点(比如i)的最短路径 最多可以有n-1条(没有回路就是n-1条):因为最短路径中不可能包含回路 ...
- Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签 《转载》
摘录某个工程的 web.xml 文件片段: 访问顺序为1—>2—>3—>4,其中2和3的值必须相同. url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命 ...
- C++中堆和栈的完全解析
C++中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并 ...