Problem A. Number Theory Problem

Solved.

水。

 #include<bits/stdc++.h>

 using namespace std;

 const int maxn = 1e5 + ;

 typedef long long ll;

 int n;
ll arr[maxn], ans[maxn]; void Init()
{
arr[] = ;
for(int i = ; i <= maxn; ++i)
{
arr[i] = (arr[i - ] * ) % ;
ans[i] = ans[i - ];
if(arr[i] == ) ans[i]++;
}
} int main()
{
Init();
int t;
scanf("%d",&t);
for(int cas = ; cas <= t; ++cas)
{
scanf("%d", &n);
printf("Case #%d: %lld\n", cas, ans[n]);
}
return ;
}

Problem B. Hemi Palindrome

Unsolved.

题意:

定义$Hemi Palindrome$ 为去掉所有奇数位上的数字后是回文串或者去掉所有偶数位上的数是回文串,给出一个长度$N$

构造一个字典序最小的$Hemi Palindrome$

Problem C. Mr. Panda and Strips

Upsolved.

题意:

选择序列中两段不相交的连续区间,要求这两段区间并没有重复数字,求最长长度。

思路:

双指针枚举第一个区间,然后再左段和右段再双指针枚举最长的合并区间

我们考虑双指针扩展右指针的过程中,也可以更新答案

但是对于已经在前一个左指针上扩展过的,就没有必要扩展了。

.....L......R........

我们考虑枚举的时候是这样的

那么L.......R 这一段没有必要再检查是否有更大的答案,因为如果有,那么必然是L - 1........R 是更大的

 #include <bits/stdc++.h>
using namespace std; #define N 1010
#define M 100010
int t, n, a[N];
int vis[M][]; int solve(int ql, int qr)
{
int res = ;
for (int i = ql, r = ql - ; i <= qr; ++i)
{
if (r < i) r = i - ;
while (r < qr && !vis[a[r + ]][] && !vis[a[r + ]][])
{
++r;
vis[a[r]][] = ;
}
res = max(res, r - i + );
vis[a[i]][] = ;
}
return res;
} int main()
{
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
printf("Case #%d: ", kase);
scanf("%d", &n);
for (int i = ; i <= n; ++i) scanf("%d", a + i);
memset(vis, , sizeof vis);
int res = ;
for (int i = , r = ; i <= n; ++i)
{
while (r < n && !vis[a[r + ]][])
{
++r;
vis[a[r]][] = ;
res = max(res, r - i + + max(solve(, i - ), solve(r + , n)));
}
int tmp = max(solve(, i - ), solve(r + , n));
res = max(res, r - i + + tmp);
vis[a[i]][] = ;
}
printf("%d\n", res);
}
return ;
}

Problem D. Ice Cream Tower

Solved.

题意:

要构造一个冰激凌塔,并且要求$第i层的尺寸需要 >=  第 i - 1 层的尺寸 \cdot 2$

给出n个冰激凌的尺寸,求最多构造多少个K层的塔

思路:

二分答案,贪心摆放。

 #include<bits/stdc++.h>

 using namespace std;

 typedef long long ll;
const int maxn = 3e5 + ; int n, k;
ll arr[maxn];
ll tower[maxn]; bool check(int mid)
{
int now = ;
for(int i = ; i <= mid; ++i) tower[i] = arr[now++];
for(int i = mid + ; i <= mid * k; ++i)
{
while(now <= n && arr[now] < tower[i - mid] * ) ++now;
if(now > n) return false;
tower[i] = arr[now++];
}
return true;
} int main()
{
int t;
scanf("%d", &t);
for(int cas = ; cas <= t; ++cas)
{
scanf("%d %d", &n, &k);
for(int i = ; i <= n; ++i) scanf("%lld", arr + i);
sort(arr + , arr + + n);
int l = , r = n / k, res = ;
while(r - l >= )
{
int mid = (l + r) >> ;
if(check(mid))
{
l = mid + ;
res = mid;
}
else r = mid - ;
}
printf("Case #%d: %d\n", cas, res);
}
return ;
}

Problem E. Bet

Solved.

题意:

有一家赌球公司,你要赌球,对于每一支队伍 赔率是$A_i : B_i$

你要如何下注,使得如果有一只球队赢了,你就不会亏本,求你最多能下注的数量。

思路:

假设本金为1, 考虑对$第i支球队下注p_i 那么需要满足 p_i + p_i \cdot \frac{B_i}{A_i} > 1 $

移项之后即为$p_i > \frac{A_i}{A_i + B_i}$

那么对所有球队按这个式子从小到大排序,取到大于一就不取了

注意精度问题,数据保证小数点后最多三位,直接$ * 1000$

 #include<bits/stdc++.h>

 using namespace std;

 typedef long long ll;

 const double eps = 1e-;
const ll MOD = 1e9 + ;
const ll INFLL = 0x3f3f3f3f3f3f3f3f;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + ; int n;
long double arr[maxn]; void RUN()
{
int t;
scanf("%d", &t);
for (int cas = ; cas <= t; ++cas)
{
scanf("%d", &n);
for (int i = ; i <= n; ++i)
{
long double ai, bi;
scanf("%Lf:%Lf", &ai, &bi);
ai = (int)(ai * + 0.1);
bi = (int)(bi * + 0.2);
arr[i] = ai / (ai + bi);
}
sort(arr + , arr + + n);
long double sum = ;
int cnt = ;
for (int i = ; i <= n; ++i)
{
sum += arr[i];
if (sum >= (long double)1.0) break;
cnt++;
}
printf("Case #%d: %d\n", cas, cnt);
}
} int main()
{
#ifdef LOCAL_JUDGE
freopen("Text.txt", "r", stdin);
#endif // LOCAL_JUDGE RUN(); #ifdef LOCAL_JUDGE
fclose(stdin);
#endif // LOCAL_JUDGE return ;
}

Problem F. Mr. Panda and Fantastic Beasts

Unsolved.

Problem G. Pandaria

Unsolved.

Problem H. Great Cells

Solved.

题意:

定义$Ag 矩阵中恰好有g个好点的方案数,定义好点为那一个点所在的行和列它最大,严格最大$

求$\sum_{i = 0}^{i = n * m} (g + 1) * A_g$

思路:

考虑将式子拆成

$\sum_{g = 0}^{g = n * m} g * A_g + \sum_{g = 0}^{g = n * m}A_g$

显然 右边的项的答案就是$k^{n * m}$

再考虑左边

如果我把式子 除以$\sum_{g = 1}^{g = n * m} A_g$

那么整个式子表达的含义即$g$  的数学期望

我们再考虑用另一种方法求数学期望

$E \cdot \sum_{g = 1}^{g = n * m} A_g = n * m * \sum_{i = 2}^{i = k} (i - 1) ^ {n + m - 2} \cdot k ^{(n - 1) * (m - 1)}$

含义是 令$i为好点的值,有多少种方案,那么显然,任意一个点都可以是好点,那么同行同列的取值为[1, i - 1]$

$其它格子的取值随意$

那么等式右边算出来的即是$所有g的总和$

 #include<bits/stdc++.h>

 using namespace std;

 typedef long long ll;

 const ll MOD = 1e9 + ;

 ll qpow(ll x, ll n)
{
ll res = ;
while(n)
{
if(n & ) res = res * x % MOD;
x = x * x % MOD;
n >>= ;
}
return res;
} int t;
int n, m, k; int main()
{
scanf("%d", &t);
for(int cas = ; cas <= t; ++cas)
{
scanf("%d %d %d", &n, &m, &k);
ll ans = ;
for(int i = ; i <= k; ++i)
{
ans = (ans + n * m % MOD * qpow(i - , n + m - ) % MOD * qpow(k, (n - ) * (m - )) % MOD) % MOD;
}
ans = (ans + qpow(k, n * m)) % MOD;
printf("Case #%d: %lld\n", cas, ans);
}
return ;
}

Problem I. Cherry Pick

Unsolved.

Problem J. Mr.Panda and TubeMaster

Unsolved.

Problem K. Justice Rains From Above

Unsolved.

Problem L. World Cup

Solved.

水。

 #include<bits/stdc++.h>

 using namespace std;

 int arr[] = {, , };
int brr[] = {, , };
int ans[][][][]; void Init()
{
for(int i1 = ; i1 < ; ++i1)
{
for(int i2 = ; i2 < ; ++i2)
{
for(int i3 = ; i3 < ; ++i3)
{
for(int i4 = ; i4 < ; ++i4)
{
for(int i5 = ; i5 < ; ++i5)
{
for(int i6 = ; i6 < ; ++i6)
{
int a = arr[i1] + arr[i2] + arr[i3];
int b = brr[i1] + arr[i4] + arr[i5];
int c = brr[i2] + brr[i4] + arr[i6];
int d = brr[i3] + brr[i5] + brr[i6];
ans[a][b][c][d]++;
}
}
}
}
}
}
} int a, b, c, d; int main()
{
Init();
int t;
scanf("%d", &t);
for(int cas = ; cas <= t; ++cas)
{
scanf("%d %d %d %d",&a, &b, &c, &d);
printf("Case #%d: ", cas);
if(a > || b > || c > || d > ) puts("Wrong Scoreboard");
else if(ans[a][b][c][d] > ) puts("No");
else if(ans[a][b][c][d]) puts("Yes");
else puts("Wrong Scoreboard");
}
return ;
}

2016-2017 ACM-ICPC CHINA-Final Solution的更多相关文章

  1. ACM ICPC China final G Pandaria

    目录 ACM ICPC China final G Pandaria ACM ICPC China final G Pandaria 题意:给一张\(n\)个点\(m\)条边的无向图,\(c[i]\) ...

  2. 2017 ACM/ICPC Asia Regional Shenyang Online spfa+最长路

    transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/1 ...

  3. 2017 ACM ICPC Asia Regional - Daejeon

    2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...

  4. 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\)个白箱,将这 ...

  5. 2017 ACM/ICPC Shenyang Online SPFA+无向图最长路

    transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 132768/1 ...

  6. 2017 ACM/ICPC Asia Regional Qingdao Online

    Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submi ...

  7. 2017 ACM/ICPC Asia Regional Qingdao Online Solution

    A : Apple 题意:给出三个点,以及另一个点,求最后一个点是否在三个点的外接圆里面,如果在或者在边界上,输出“Rejected”,否则输出"Accepted" 思路:先求一个 ...

  8. HDU - 6215 2017 ACM/ICPC Asia Regional Qingdao Online J - Brute Force Sorting

    Brute Force Sorting Time Limit: 1 Sec  Memory Limit: 128 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...

  9. 2017 ACM/ICPC(北京)总结

    这个季节的,北京真的很冷. 下午的热身赛,我依然先去敲一道搜索题,但是很不幸这道搜索题坑点还是蛮多的,浪费了好长时间后依然没能A掉,期间Codeblocks崩溃一次使得代码完全丢失,在队友的建议下便暂 ...

  10. 2017 ACM/ICPC Asia Regional Shenyang Online transaction transaction transaction

    Problem Description Kelukin is a businessman. Every day, he travels around cities to do some busines ...

随机推荐

  1. GIS-002-gdal2srtmtiles使用注意事项

    本次安装和配置过程重点参考了: 1.http://blog.csdn.net/wjkwjk/article/details/52560236 2.http://blog.csdn.net/wjkwjk ...

  2. VMware克隆虚拟机后网络不能正常使用的解决方法

    1.问题情况 在vmware中克隆一个虚拟机后,新的虚拟机网络无法使用,并用原操作系统中的网卡eth0在克隆出来的新系统中,网卡号变成了eth1,并且IP地址也丢失了,网络不可正常使用. 2.环境情况 ...

  3. android中用studio更改包名

    Android Studio,咱们开发安卓的利器,自推出就受到移动开发者的追捧,但一路走来,大家谈到他,充满了兴奋之情之余,也略显羞涩.随版本自推出以来,不断完善BUG,但咱们还是深深地踩了进去,说多 ...

  4. FastCGI中fastcgi_param 详细说明

    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param  QUERY ...

  5. 一次Win10安装体验

    我下载的是win10 Build 14279版本.http://www.iwin10.com/xiazai/1071.html 下载之后就直接拷到U盘安装了. 安装完之后发现(因为我是分区成了两个)我 ...

  6. linux下php安装

    nginx中配置php:  http://www.111cn.net/sys/nginx/64044.htm

  7. python实现HTTP代理的思路和Demo

    一.首先什么是代理: 代理其实就是中间转发的那个玩意,所以在代码逻辑上也是如此的. 二.Python写http代理的基本逻辑: (1)接受浏览器发出的请求,解析,拼凑成该有的样子,然后使用套接字发出去 ...

  8. 【BZOJ3011】[Usaco2012 Dec]Running Away From the Barn 可并堆

    [BZOJ3011][Usaco2012 Dec]Running Away From the Barn Description It's milking time at Farmer John's f ...

  9. Unity3D笔记六 GUI游戏界面

    1.Label:标签控件,可以在游戏中用来展示文本字符串信息,不仅可以写字还可以贴图片. 2.Button:按钮控件,一般分图片按钮和普通的按钮,还有一个连续按钮RepeatButton注意,这个在W ...

  10. 微信小程序 --- 组件

    view组件:小程序使用最多的组件.可以理解为 div: Text组件:用于展示文字.可以理解为 p span 标签.(除了Text组件以外的其他组件都无法被长按选中) Text组件无法解析HTML, ...