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. linux下安装pip以及导入第三方包

    python有着强大的第三方库,数量很多且功能强大. 最原始的办法是在官网上下载压缩包,解压,然后运行setup.py来进行安装. 显然这种方法很繁琐,不方便.因此有了包管理工具. pip是一个包管理 ...

  2. details和summary标签

    用于文档说明,有自带收缩.展开功能 <!DOCTYPE HTML> <html> <body> <details> <summary>HTM ...

  3. Linux hwclock 命令

    hwclock 即 Hardware Clock 硬件时钟,该命令用于查询或设置硬件时钟:硬件时钟是指主机板上的时钟设备,也就是通常可在 BIOS 画面设定的时钟:系统时钟是指 Kernel 中的时钟 ...

  4. Win8/8.1下驱动安装“数据无效”错误的有效解决方法

    Windows8.1 安装完vmware 后并没有安装 vmnet1,vmnet8 这两个虚拟网卡,纠结了半天,原来是两个服务没打开. 如果你使用的是Windows8或者8.1,并且精简过系统,那么在 ...

  5. PyQt4状态栏

    主窗口 QMainWindow类用来创建应用程序的主窗口.通过该类,我们可以创建一个包含状态栏.工具栏和菜单栏的经典应用程序框架. 状态栏是用来显示状态信息的串口部件. #!/usr/bin/pyth ...

  6. Android 使用WebView显示网页

    构建WebView就可以显示Web信息.因为我觉得这里会讲述很多方式来实现WebView,所以我决定为每一种方式创建一个对应的Activity,MainActivity通过Button可以点击进入对应 ...

  7. 进程防结束之PS_CROSS_THREAD_FLAGS_SYSTEM

    有人投到黑防去了,不过黑防不厚道,竟然没给完整的代码,自己整理一份备用吧,驱网.DebugMan.邪八的那群人直接飘过吧. 这种方法的关键在于给线程的ETHREAD.CrossThreadFlags设 ...

  8. mysql增删改查基本语句

    mysql的增删改查属于基本操作,又被简称CRUD,其中删用的较少,毕竟这个功能给用户是是非常危险的,就是客户删除的数据也没有真正的删除,其中查询是十分常用的. 1 mysql数据库增加:create ...

  9. c++ 重载、重写、重定义(隐藏)

    1.重载overload:函数名相同,参数列表不同. 重载只是在类的内部存在,或者同为全局范围.(同名,同参函数返回值不同时,会编译出错.因为系统无法知晓你到底要调用哪一个.)   2.重写overr ...

  10. 1.执行环境判断 window 或 self

    window or self ? 在 underscore 的判断所处环境的代码中,似乎我们没有看到 window 对象的引用,其实,在浏览器环境下,self 保存的就是当前 window 对象的引用 ...