A.The Wall

题意:两个人粉刷墙壁,甲从粉刷标号为x,2x,3x...的小块乙粉刷标号为y,2y,3y...的小块问在某个区间内被重复粉刷的小块的个数。

分析:求出x和y的最小公倍数,然后做一个一维的区间减法就可以了。

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long LL;
int x, y, a, b; int main() {
scanf("%d %d %d %d", &x, &y, &a, &b);
int d = __gcd(x, y);
int lcm = x / d * y;
printf("%d\n", b/lcm - (a-)/lcm);
return ;
}

B.Maximal Area Quadrilateral

题意:给定若干个点,求任选四个点后组成的最大的多边形面积。

分析:不能够枚举四个点的组合情况,可以把任何一个四边形看作是一条直线作为边的两个三角形组成的,这样两边的三角形分别求最值就可以了,时间复杂度O(n^3)。

#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int n, x[], y[];
const int inf=<<;
int main( )
{
scanf("%d", &n);
for( int i=; i<n; ++i ){
scanf("%d%d", &x[i], &y[i]);
}
int Max=, m1, m2, n1, n2,t;
for( int i=; i<n; ++ i ){
for( int j=i+; j<n; ++ j ){
m1=-inf, m2=-inf, n1=inf, n2=inf;
for( int k=; k<n; ++ k ){
if(k==i || k==j) continue;
t=(x[j]-x[i])*(y[k]-y[i]) - (x[k]-x[i])*(y[j]-y[i]);
if(t<){
m1=max(m1, -t );
n1=min(n1, -t);
}
else{
m2=max(m2, t);
n2=min(m2, t);
}
}
Max=max(Max, m1+m2);
}
}
printf("%.6lf", 1.0*Max/);
return ;
}

C.Tourist Problem

题意:给定一个N个点在一维直线的坐标,现在有按照 N! 种不同的排列方式来访问这些点,问平均每步的距离为多少,定义两位置的距离为坐标差的绝对值。

分析:单独考虑每个元素在所有排列中的总贡献。对于每一个元素只考虑其前一个元素和其的距离,那么一共有N-1个元素与其匹配,对于每个数该数对存在的位置共有N-1种,加之剩下的数的排列数(N-2)!则每个数对共有(N-1)!种情况,计算出任何一个数与其余N-1个数的绝对值之差之和,然后乘上(N-2)!就是总路程和了。由于要求的平均距离,因此还应除以N!,刚好 (N-1)! 和 N! 的可以约掉。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int N = ;
typedef long long LL;
int seq[N];
LL sum[N];
int n; int main() {
scanf("%d", &n);
LL a = , b = ;
for (int i = ; i <= n; ++i) {
scanf("%d", &seq[i]);
}
sort(seq+, seq++n);
for (int i = ; i <= n; ++i) {
sum[i] = sum[i-] + seq[i];
}
for (int i = ; i <= n; ++i) {
a += 1LL*(i-)*seq[i]-sum[i-]+ sum[n]-sum[i-]-1LL*(n-i)*seq[i];
}
b = n;
LL d = __gcd(a, b);
a /= d, b /= d;
printf("%I64d %I64d\n", a, b);
return ;
}

D.Bubble Sort Graph

题意:给定一个1-N的全排列,定义逆序对为ai > aj when i < j。对于所有的逆序对连边,求最后形成图的最大独立子集。

分析:初看起来确实是无从下手,但是可以发现一个性质那就是所有的最后的独立子集一定会是原序列中一个单调非递减的子序列,因此求最长单调非递减子序列即可。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std; const int N = ;
int seq[N];
int n;
typedef vector<int> v_int; void solve() {
v_int vt;
v_int::iterator it;
for (int i = ; i < n; ++i) {
it = upper_bound(vt.begin(), vt.end(), seq[i]);
if (it == vt.end()) vt.push_back(seq[i]);
else *it = seq[i];
}
printf("%d\n", (int)vt.size());
} int main() {
scanf("%d", &n);
for (int i = ; i < n; ++i) {
scanf("%d", &seq[i]);
}
solve();
return ;
}

E.Iahub and Permutations

题意:给定一个1-N的全排列,不过有些位置是被-1代替的,现在要求可能的原序列有多少种,方案数 mod 10^9+7。题目给定一个限制那就是 ai != i。

分析:由于 ai != i 这完全符合错排的定义,不过稍有不同的此处已经给出了某些元素的位置,那么考虑到错排运用容斥定理的推理过程可知此处正好能够应对这一变种。根据输入统计出有多少个数字的安排是有限制的,多少是没有限制的。然后枚举有限制的数字放在限制位置的个数,容斥一下即可。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; typedef long long LL;
const int N = ;
const int mod = int(1e9)+;
int n, x, y; // x表示自由放置的数字的数量,y表示有限制的数字
char hav[N];
char fre[N];
int fac[N]; void pre() {
fac[] = ;
for (int i = ; i <= ; ++i) {
fac[i] = 1LL*fac[i-]*i%mod;
}
} int pow(int a, int b) {
int ret = ;
while (b) {
if (b & ) ret = 1LL*ret*a%mod;
b >>= ;
a = 1LL*a*a%mod;
}
return ret;
} void solve() {
int ret = ;
for (int i = ; i <= y; ++i) {
LL sign = i & ? - : ;
ret = (1LL*ret+sign*fac[x+y-i]*pow(1LL*fac[i]*fac[y-i]%mod, mod-)%mod)%mod;
ret = (ret + mod) % mod;
}
printf("%d\n", 1LL*ret*fac[y]%mod);
} int main() {
pre();
int a;
scanf("%d", &n);
for (int i = ; i <= n; ++i) {
scanf("%d", &a);
if (a != -) hav[a] = , fre[i] = ;
}
for (int i = ; i <= n; ++i) {
if (!hav[i]) {
if (fre[i]) ++x;
else ++y;
}
}
solve();
return ;
}

Codeforces Round #198 (Div. 2)的更多相关文章

  1. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

  2. [置顶] Codeforces Round #198 (Div. 1)(A,B,C,D)

    http://codeforces.com/contest/341 赛后做的虚拟比赛,40分钟出了3题,RP爆发. A计数问题 我们可以对每对分析,分别对每对<a, b>(a走到b)进行统 ...

  3. Codeforces Round #198 (Div. 2) E. Iahub and Permutations —— 容斥原理

    题目链接:http://codeforces.com/contest/340/problem/E E. Iahub and Permutations time limit per test 1 sec ...

  4. Codeforces Round #198 (Div. 1) D. Iahub and Xors 二维树状数组*

    D. Iahub and Xors   Iahub does not like background stories, so he'll tell you exactly what this prob ...

  5. Codeforces Round #198 (Div. 1) B,C 动态规划

    比赛时,开了大号去做,算了半天发现不会做A,囧.于是跑去看B,发现很水?于是很快敲完了,但是A不会,没敢交.于是去看C,一直找规律啊,后来总算调了出来,看了一下榜,发现还是算了吧,直接去睡觉了.第二天 ...

  6. Codeforces Round #198 (Div. 2) —— D

    昨天想了一下D题,有点思路不过感觉很麻烦,就懒得去敲了: 今天上午也想了一下,还是没有结果,看了一下官方题解,证明得很精彩: 这道题目其实就是一道裸地最大上升子序列的题: 看到这里,直接怒码···· ...

  7. Codeforces Round #198 (Div. 2) —— C

    C题很容易看懂题目,不过两个循环肯定会TLE,所以得用点小聪明: 首先排好序,因为是全排列,乱序和顺序的结果是一样的: 然后呢···· 如果是数列 1 2 3 4 5 元素1 被 2 3 4 5每个减 ...

  8. Codeforces Round #198 (Div. 2) —— B

    B题是一个计算几何的题,虽然以前看过计算几何的ppt,但一直都没有写过: 昨晚比赛的时候本来想写的,但是怕不熟练浪费时间,太可惜了! 其实没必要选出一个最大的矩形: 以矩形的一条对角线为轴,向上或者向 ...

  9. Codeforces Round #198 (Div. 2) —— A

    最水的题,可惜当时赶时间没有注意数据范围:暴力超时了! 其实应该用x,y的最大公约数来判断: 代码: #include<iostream> using namespace std; int ...

随机推荐

  1. MySQL之对数据库库表的字符集的更改

    数据字符集修改步骤: 对于已有的数据库想修改字符集不能直接通过 "alter database character set *"或 "alter table tablen ...

  2. DECODE函数

    DECODE函数相当于一条件语句(IF),它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值.函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式.当然,如果未能与任何一个实参序偶匹 ...

  3. 删除ecshop云服务及授权关于官方等信息

    一.删除[云服务中心] 删除/admin/cloud.php 删除/admin/templates/menu.htm中以下代码 Ajax.call('cloud.php?is_ajax=1>ac ...

  4. C++Lua配置

    1.先从lua官网下载lua新版本http://www.lua.org/,我这里以lua-5.3.0.tar.gz为例,大小不到300kb 2.解压后出现如下图 3.在vs2013新建工程静态库类型( ...

  5. 【转】MYSQL入门学习之九:索引的简单操作

    转载地址:http://www.2cto.com/database/201212/176772.html 一.创建索引  www.2cto.com           MYSQL常用的索引类型主要有以 ...

  6. Spring资源访问

    资源访问 1.Resource Jdk提供的访问资源的类并不能很好地满足各种底层的资源访问需求, 比如缺少从类路径或者web容器的上下文中获取资源的操作类. 鉴于此, Spring设计了一个Resou ...

  7. Git学习笔记03--git reset

    摘自<Git权威指南> Git reset 是Git最常用的命令之一,也是最危险最容易误用的命令. 用法一:git reset [-q] [<commit>] [--] < ...

  8. C# .ToString() 格式化

    c# ToString() 格式化字符串  格式化数值:有时,我们可能需要将数值以一定的格式来呈现,就需要对数值进行格式化.我们使用格式字符串指定格式.格式字符串采用以下形式:Axx,其中 A 为格式 ...

  9. 解决保存快照失败后redis无法写入的问题

    用命令行工具连上后执行“set test 0”出现以下错误提示: MISCONF Redis is configured to save RDB snapshots, but is currently ...

  10. Java发送邮件,所遇到的常见需求

    明天要做关于发送邮件的接口,虽然我之前已用Java Mail做过许多关于邮件的发送.但同事说有点难点,虽我还不知难点在哪,还是要复习下.凡事预则立,不预则废嘛~ 所需的包: Java Mail : 目 ...