Codeforces Round #341 (Div. 2) ABCDE
http://www.cnblogs.com/wenruo/p/5176375.html
A. Wet Shark and Odd and Even
题意:输入n个数,选择其中任意个数,使和最大且为奇数。
题解:算出所有数的和,如果奇数的个数为奇数个,则减去最小的奇数,否则不用处理。
#include <bits/stdc++.h>
using namespace std;
#define PI acos(-1.0)
#define EXP exp(1.0)
#define ESP 1E-6
#define clr(x,c) memset(x,c,sizeof(x))
typedef long long ll; using namespace std;
int main()
{
int n;
int cnt = ; int minn = ;
int val;
ll ans = ;
scanf("%d", &n);
for (int i = ; i < n; ++i) {
scanf("%d", &val);ans += val;
if (val % == ) {
cnt++;
minn = min(minn, val);
}
}
if (cnt % == ) ans -= minn;
cout << ans;
return ;
}
B. Wet Shark and Bishops
题意:一个1000*1000的棋盘,上面摆放n个棋子,同一对角线上的两个棋子可以相互攻击,求一共有多少对棋子可以相互攻击。
题解:有主对角线和副对角线,对于每一个对角线,设对角线上有棋子X个,则该对角线有C(X,2)对棋子可以相互攻击。
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define EXP exp(1.0)
#define ESP 1E-6
#define clr(x,c) memset(x,c,sizeof(x))
typedef long long ll; using namespace std; int xSubY[];
int xAddY[];
ll c[][];
//c[i][j] := C(i, j)
void init()
{
c[][] = ;
for(int i = ; i <= ; i++)
{
c[i][] = ;
c[i][i] = ;
for(int j = ; j < i; j++)
c[i][j] = (c[i-][j-] + c[i-][j]);
}
} int main()
{
init();
int n;
int x, y;
scanf("%d", &n);
for (int i = ; i < n; ++i) {
scanf("%d%d", &x, &y);
xSubY[x-y+]++;
xAddY[x+y]++;
}
ll ans = ;
for (int i = ; i <= ; ++i) {
ans += c[ xSubY[i] ][];
ans += c[ xAddY[i] ][];
}
cout << ans;
return ;
}
C. Wet Shark and Flowers
题意:n个鲨鱼围成一圈1~n,每个鲨鱼有一个数,鲨鱼i的数字在范围l[i]~r[i],如果相邻数字的乘积为P或P的倍数(p为素数),则两个鲨鱼各获得1000元,求一共能获得钱的期望。
题解:分别考虑相邻的每两个就可以,对于相邻两个数,只有至少一个为p的倍数,才有可能乘积是p的倍数。对于每个鲨鱼一共有r-l+1个数字,有r/p-(l-1)/p的p的倍数。具体看代码。
#include <bits/stdc++.h>
#define PI acos(-1.0)
#define EXP exp(1.0)
#define ESP 1E-6
#define clr(x,c) memset(x,c,sizeof(x))
typedef long long ll; using namespace std;
const int N = ; int l[N];
int r[N];
double ans[N]; int main()
{
int n, p;
scanf("%d%d", &n, &p);
for (int i = ; i < n; ++i) {
scanf("%d%d", &l[i], &r[i]);
}
l[n] = l[]; r[n] = r[];
for (int i = ; i < n; ++i) {
double a = r[i] - l[i] + ;
double b = r[i + ] - l[i + ] + ;
double pa = r[i] / p - (l[i] - ) / p;
double pb = r[i + ] / p - (l[i + ] - ) / p;
double tmp = (pa * b + pb * a - pa * pb) / (a * b);
ans[i] += tmp;
ans[i + ] += tmp;
}
double res = ;
for (int i = ; i <= n; ++i) res += ans[i];
printf("%f", res * ); return ;
}
D. Rat Kwesh and Cheese
题意:很简单,求a1 = xyz;a2 = xzy;a3 = (xy)z;a4 = (xz)y;a5 = yxz;a6 = yzx;a7 = (yx)z;a8 = (yz)x;a9 = zxy;a10 = zyx;a11 = (zx)y;a12 = (zy)x.的最大值。(0.1 ≤ x, y, z ≤ 200.0)
题解:很容易想到求对数,但是,y^z也会很大,所以想当然的求了两次对数,也就是log(log(x^y^z))变成z*log(y)+log(log(x));但是log(x)会出现负数……(后来发现好多人都是这么做的,笑)。正解是取一次对数,然后使用long double,精度足够。
#include <bits/stdc++.h>
typedef long double lld;
using namespace std;
const lld ESP = 1E-; lld cal(lld x, lld y, lld z)
{
//return z * log(y) + log(log(x));
return log(x) * pow(y, z);
} lld ca(lld x, lld y, lld z)
{
//return log(y * z * log(x));
return y * z * log(x);
} int main()
{
const char* result[] = {"x^y^z", "x^z^y", "(x^y)^z", "(x^z)^y", "y^x^z",
"y^z^x", "(y^x)^z", "(y^z)^x", "z^x^y", "z^y^x", "(z^x)^y", "(z^y)^x"}; lld a[];
lld x, y, z;
cin >> x >> y >> z;
a[] = cal(x, y, z);
a[] = cal(x, z, y);
a[] = ca(x, y, z);
a[] = ca(x, z, y);
a[] = cal(y, x, z);
a[] = cal(y, z, x);
a[] = ca(y, x, z);
a[] = ca(y, z, x);
a[] = cal(z, x, y);
a[] = cal(z, y, x);
a[] = ca(z, x, y);
a[] = ca(z, y, x);
lld maxn = a[];
int res = ;
for (int i = ; i < ; ++i) {
if (maxn < a[i] - ESP) {
maxn = a[i];
res = i;
}
}
printf("%s", result[res]);
return ;
}
E. Wet Shark and Blocks
题意:n个堆,每个堆有b个数字,每一个堆取一个数字,第i个堆取一个数字做第i位的数字,构成一个n位数,求构成的数字被x除余k有多少种方案。
题解:看到这题就想到了前几天做的题http://www.cnblogs.com/wenruo/p/5153790.html 不过这个简单些,然并卵,比赛时并没有写出来……dp+矩阵快速幂
#include <bits/stdc++.h>
typedef long long ll;
using namespace std; int digit[];
const ll MOD = ; typedef vector<ll> vec;
typedef vector<vec> mat; mat mul(mat &A, mat &B)
{
mat C(A.size(), vec(B[].size()));
for (unsigned int i = ; i < A.size(); ++i) {
for (unsigned int k = ; k < B.size(); ++k) {
for (unsigned int j = ; j < B[].size(); ++j) {
C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD;
}
}
}
return C;
} mat pow(mat A, int n)
{
mat B(A.size(), vec(A.size()));
for (unsigned int i = ; i < A.size(); ++i)
B[i][i] = ;
while (n > ) {
if (n & ) B = mul(B, A);
A = mul(A, A);
n >>= ;
}
return B;
} /*
dp[i][k] i位数 余数为k
dp[i+1][(j+k*10)%x] = dp[i][k]*digit[j], 1<=j<=9
*/
ll cal(int n, int x, int k)
{
mat f(x, vec(x));
for (int i = ; i < x; ++i) { // 上一位余数
for (int j = ; j <= ; ++j) { // 首位数字
int num = (i * + j) % x; // 当前余数
f[num][i] += digit[j];
}
} mat v(x, vec());
for (int i = ; i <= ; ++i)
v[i % x][] += digit[i]; // dp[1][i%x][i] f = pow(f, n - );
v = mul(f, v);
return v[k][];
} int main()
{
int n, b, k, x;
scanf("%d%d%d%d", &n, &b, &k, &x);
int val;
for (int i = ; i < n; ++i) {
scanf("%d", &val);
digit[val]++;
}
cout << cal(b, x, k); return ;
}
总体而言这次的比赛比较简单^_^
Codeforces Round #341 (Div. 2) ABCDE的更多相关文章
- Codeforces Round #261 (Div. 2)[ABCDE]
Codeforces Round #261 (Div. 2)[ABCDE] ACM 题目地址:Codeforces Round #261 (Div. 2) A - Pashmak and Garden ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #460 (Div. 2) ABCDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8397685.html 2018-02-01 $A$ 题意概括 你要买$m$斤水果,现在有$n$个超市让你选择. ...
- Codeforces Round #341 (Div. 2) E. Wet Shark and Blocks dp+矩阵加速
题目链接: http://codeforces.com/problemset/problem/621/E E. Wet Shark and Blocks time limit per test2 se ...
- Codeforces Round #546 (Div. 2) ABCDE 题解
1136A: 题意:一本书有n个章节,每个章节的分别在li到ri页,小明读完书后将书折在第k页,问还有多少章节没有读 题解:控制k在li~ri的范围内后输出n-i即可 #include <set ...
- Codeforces Round #341 (Div. 2) D. Rat Kwesh and Cheese 数学
D. Rat Kwesh and Cheese 题目连接: http://www.codeforces.com/contest/621/problem/D Description Wet Shark ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- Codeforces Round #341 Div.2 D. Rat Kwesh and Cheese
嗯本来想着直接算出来不就行了吗 然后我想到了200^200^200....... 好吧其实也不难取两次log就行了 然后我第一次写出来log就写残了........... log里面的拆分要仔细啊.. ...
- Codeforces Round #341 Div.2 C. Wet Shark and Flowers
题意: 不概括了..太长了.. 额第一次做这种问题 算是概率dp吗? 保存前缀项中第一个和最后一个的概率 然后每添加新的一项 就解除前缀和第一项和最后一项的关系 并添加新的一项和保存的两项的关系 这里 ...
随机推荐
- Centos 6.2上安装使用 Informix11.70 数据库
环境要求:操作系统: Centos 6.2 32位数据库软件: iif.11.70.UC7IE.Linux-RHEL5.tar(在IBM网站上注册个帐号就可以下载,包括windows,Linux,Un ...
- 换一换js
(function(){ var tit = $("#changes"), con = $("#wday>ul"), page = con.length, ...
- HDU4535+公式
错排公式. 用64位! /* */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include ...
- Tomcat 6.0下配置HTTPS
最近项目需要使用到https,所以回顾整理了一下,其实在tomcat的文档中已经有了详细描述,我们启动Tomcat后,可以在docs文档中找到 地址如下:http://localhost:8080/d ...
- Java调用存储过程时报 The user specified as a definer ('root'@'%') does not exist 解决方法
Caused by: java.sql.SQLException: The user specified as a definer (''@'') does not exist at c ...
- linux shell sleep/wait(转载)
linux shell sleep/wait(转载) 2007-04-27 18:12 bash的基本配置是由配置文件组成的./etc/profile称之为shell的全局配置文件.另外一个文件在个人 ...
- bzoj2763
首先是稀疏图,不难想到dij+heap 观察题目可以知道,0<=k<=10; 所以比较裸的想法就是,d[i,j]表示已经免费了i条线路后到达j的最短路 容易得到 d[i,j]:=min(d ...
- [swustoj 191] 迷宫逃离
迷宫逃离(0191) 描述 江鸟突然想到了一个迷宫逃离的游戏,话说有三个人被困于一个n*m的迷宫里,他们三人都可以向上.向下.向左.向右四个方向进行走动,当然他们所在的初始位置没有障碍物,同时只能走到 ...
- 不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime
不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime 前一段时间图片处理服务一直报“System.Format ...
- java web的一些特殊用法(一)
1.查看jquery ajax请求的数据的具体格式 很多时候,我们需要查看到ajax返回时的具体格式才知道怎么去解析他.在最原始的ajax写法中,可以通过xmlhttp.responseText查看到 ...