http://codeforces.com/contest/888

A Local Extrema【水】

【题意】:计算极值点个数

【分析】:除了第一个最后一个外,遇到极值点ans++,包括极大和极小

【代码】:

#include<bits/stdc++.h>

using namespace std;

int main()
{
int n,a[+];
int maxn,minn;
maxn=minn=;
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
}
for(int i=;i<=n-;i++)
{
if(a[i]>a[i+]&&a[i]>a[i-]) maxn++;
if(a[i]<a[i+]&&a[i]<a[i-]) minn++;
}
cout<<minn+maxn<<endl;
return ;
}

暴力

B Buggy Robot【模拟】

【题意】:机器人从(0,0)出发,有UDLR四种走法,分别代表上下左右的方向,最后回到(0,0),给你一段包含这些走法的序列,求最多有几个走法正确(即可以删去最少的操作使其能够回到原点)。

【分析】:记录下四个方向执行了几次,然后取相反方向的最小值乘2。我是这么想的,还特判了。最后被hack了···

【代码】:

#include<bits/stdc++.h>

using namespace std;

int main()
{
int n,min1,min2;
int l,d,u,r;
l=d=u=r=min1=min2=;
char a[];
cin>>n;
for(int i=;i<n;i++)
{
cin>>a[i];
if(a[i]=='L') l++;
else if(a[i]=='D') d++;
else if(a[i]=='U') u++;
else r++;
}
if(l&&(!r)){
printf("0\n");
return ;
}
if(r&&(!l)){
printf("0\n");
return ;
}
if(u&&(!d)){
printf("0\n");
return ;
}
if(d&&(!u)){
printf("0\n");
return ;
} if(l&&r) min1=*min(l,r);
if(u&&d) min2=*min(u,d); printf("%d\n",min1+min2);
return ;
}

被hack代码

#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N,l=,r=,u=,d=;
cin>>N;
string s;
cin>>s;
for(int i=;i<s.length();i++){
if(s[i]=='L')l++;
if(s[i]=='R')r++;
if(s[i]=='U')u++;
if(s[i]=='D')d++;
}
cout<<*(min(l,r)+min(u,d))<<endl;
}

AC

C K-Dominant Character【贪心】

【题意】:给一小写字母组成的字符串,找个长度最短的k。使得这些长度为k的子串必须包含了某同一个字符。

【分析】:记录下两个相同字符的最长距离,然后取这些距离的最小值。最小化最大值。

一个数组记录该字母上一次出现的位置

一个数组记录该字母相邻最大距离

如果没有重复出现的字符呢

设定在-1和len两个位置上和所以字母相同

 比如abbbabba串,对于字母a,有距离4,3,那么数组里存的就是4 

(金牌讲师010):对于aab
有a这个位置的是
1 2
字符串长度是3
间距分别是
0-1 1
1-2 1
2-4 2
0和4是字符串的边界外
所以对于字符a就是2是最大间距
b只有3这个位置出现
0-3 3
3-4 1
所以b的最大间距是3
这题答案就是2
字符串的边界外也算进去?
因为
___x___x____x__
两边还有__
x是出现的位置

【代码】:

#include<bits/stdc++.h>

using namespace std;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
const double pi = acos(-1.0);
const int maxn = +;
const int mod = 1e9+;
char a[maxn];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
scanf("%s",a+);
int len=strlen(a+),ans=len;
for (int i=;i<;i++){
int tmp=;
int pos=;
for (int j=;j<=len;j++)if (a[j]==i)tmp=max(tmp,j-pos),pos=j;
tmp=max(tmp,len+-pos);
ans=min(ans,tmp);
}
printf("%d\n",ans);
return ;
}
D. Almost Identity Permutations【排列组合】
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

A permutation p of size n is an array such that every integer from 1 to n occurs exactly once in this array.

Let's call a permutation an almost identity permutation iff there exist at least n - k indices i (1 ≤ i ≤ n) such that pi = i.

Your task is to count the number of almost identity permutations for given numbers n and k.

Input

The first line contains two integers n and k (4 ≤ n ≤ 1000, 1 ≤ k ≤ 4).

Output

Print the number of almost identity permutations for given n and k.

Examples
input
4 1
output
1
input
4 2
output
7
input
5 3
output
31
input
5 4
output
76

【题意】:一个长为n的排列,其中pi=i的位置大于等于n-k的排列方案数, 比如n=5 k=3让你求有多少个1 2 3 4 5的排列使得至少5-3=2个数字在“原位”
【分析】:公式是C(n,i)*D(i) (0<=i<=k),
错排只用弄到4,
组合数也只用弄到1000,4 
 
【代码】:
By RoniKing, contest: Educational Codeforces Round , problem: (D) Almost Identity Permutations, Accepted, #
#include <bits/stdc++.h>
#define LL long long
using namespace std;
//const int mod=1e9+7;
const int maxn=1e3+;
LL D[maxn], C[maxn][];
int p[+];
void init()
{
D[]=;
D[]=;
for(int i=;i<maxn;i++)//错排
D[i]=((i-)*(D[i-]+D[i-]));
int i;
//for (p[0]=i=1;i<=200000;i++) p[i]=1ll*p[i-1]*i%mod;
for (int i = ; i < maxn; i++)//排列组合
{
for (int j = ; j <= min(, i); j++)
{
if (j == ) C[i][j] = ;
else
C[i][j] = (C[i-][j] + C[i-][j-]) ;
}
}
}
int main()
{
init();
int t; int n,k;
cin>>n>>k;
LL ans=;
for(LL i=;i<=n;i++)
ans = ans * i ;
LL val=;
for(int i=;i<=k;i++)
val=(val + D[i]*C[n][i]) ;
// cout<<ans<<endl;
cout<<val<<endl;
//cout<<(ans-val)<<endl; }

我的丑代码

#include<bits/stdc++.h>

using namespace std;

int main()
{
long long n,k;
cin>>n>>k;
long long ans=;
if(k>=) ans+=n*(n-)/;
if(k>=) ans+=n*(n-)*(n-)/;
if(k>=) ans+=n*(n-)*(n-)*(n-)*/;
cout<<ans;
return ;
}

简♂短

Educational Codeforces Round 32的更多相关文章

  1. Educational Codeforces Round 32 Problem 888C - K-Dominant Character

    1) Link to the problem: http://codeforces.com/contest/888/problem/C 2) Description: You are given a ...

  2. Educational Codeforces Round 32 E. Maximum Subsequence

    题目链接 题意:给你两个数n,m,和一个大小为n的数组. 让你在数组找一些数使得这些数的和模m最大. 解法:考虑 dfs但是,数据范围不允许纯暴力,那考虑一下折半搜索,一个从头开始往中间搜,一个从后往 ...

  3. Educational Codeforces Round 32:E. Maximum Subsequence(Meet-in-the-middle)

    题目链接:E. Maximum Subsequence 用了一个Meet-in-the-middle的技巧,还是第一次用到这个技巧,其实这个技巧和二分很像,主要是在dfs中,如果数量减小一半可以节约很 ...

  4. Educational Codeforces Round 32 Maximum Subsequence CodeForces - 888E (meet-in-the-middle,二分,枚举)

    You are given an array a consisting of n integers, and additionally an integer m. You have to choose ...

  5. Educational Codeforces Round 32 Almost Identity Permutations CodeForces - 888D (组合数学)

    A permutation p of size n is an array such that every integer from 1 to n occurs exactly once in thi ...

  6. Educational Codeforces Round 32 E 二分

    题意:从数组中选几个(任意),使他们的和modm的值最大 题解:我一开始是直接暴力写,然后就会t 其实这题可以用二分的方法写,一半数组的值用来遍历,一般数组的值用来查询. 二分查询就能把时间继续缩短 ...

  7. Educational Codeforces Round 132 (Rated for Div. 2)

    Educational Codeforces Round 132 (Rated for Div. 2) A. Three Doors 简述 题意: 有三扇门(1~3), 其中两扇门后面有对应标号门的钥 ...

  8. [Educational Codeforces Round 16]E. Generate a String

    [Educational Codeforces Round 16]E. Generate a String 试题描述 zscoder wants to generate an input file f ...

  9. [Educational Codeforces Round 16]D. Two Arithmetic Progressions

    [Educational Codeforces Round 16]D. Two Arithmetic Progressions 试题描述 You are given two arithmetic pr ...

随机推荐

  1. react基本知识点合集

    妹子UI里面有React的相关组件与用法:http://amazeui.org/react/components React官方网站:https://facebook.github.io/react/ ...

  2. USACO Section1.3 Combination Lock 解题报告

    combo解题报告 —— icedream61 博客园(转载请注明出处)---------------------------------------------------------------- ...

  3. spring 笔记2:Spring MVC : Did not find handler method for 问题的解决

    日志显示为: Looking up handler method for path /***Did not find handler method for [/***]No mapping found ...

  4. appium-手势密码实现-automationName 是Appium的情况

    1. 红色区域的范围为:[66,575][1014,1523], 由于这块是一个整块,所以无法使用每个点的数据:因此只能使用LockPatternView对象拿到左上角的坐标值 2.  原理, 将九宫 ...

  5. python 读取数据库中文内容显示一堆问号

    需要在连接数据库时 设置编码格式 def select_db(self,db_name): self.conn = MySQLdb.connect( host = self.ip, port = se ...

  6. 第一天docker入门

    [01 入门] docker 最核心为三部分组成 镜像,仓库和容器 镜像:一个只读的模板 仓库:代码仓库,镜像的集合 容器:镜像的实例化进程 我们可以这样理解 容器就是一个沙箱,docker利用容器运 ...

  7. NYOJ 42 一笔画

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  8. perror表

    #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #defi ...

  9. 物联网第一次作业--我眼中的物联网——从认识RFID开始

    无线射频识别技术(Radio FrequencyIdentification,简称:RFID)是一种非接触式的自动识别技术,其基本原理是利用射频信号和空间耦合(电感或电磁耦合)或雷达反射的传输特性,实 ...

  10. P4342 [IOI1998]Polygon

    题意翻译 题目可能有些许修改,但大意一致 多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4.每个顶点用整数标记,每个边用符号+(加)或符号*(乘积)标记. 第一步,删除其中一条边 ...