ACM ICPC

每个队伍必须是3个人

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
using namespace std;
int cmp(const void * x, const void * y) {
//x < y
return (*((double *)(x))) > (*((double *)(y))) ? : -;
}
int a[];
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
for (int i = ; i < ; i++) scanf("%d", &a[i]);
int sum = ;
for (int i = ; i < ; i++) sum += a[i];
bool f = false;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
for (int k = ; k < ; k++) {
if (i != j && j != k && i != k && (a[i] + a[j] + a[k]) * == sum)f = true;
}
}
}
if (f) printf("Yes\n");
else printf("No\n");
return ;
}

Vlad and Cafes

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
using namespace std;
int cmp(const void * x, const void * y) {
//x < y
return (*((double *)(x))) > (*((double *)(y))) ? : -;
}
int a[];
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, x, ans;
scanf("%d", &n);
memset(a, -, sizeof(a));
for (int i = ; i < n; i++) {
scanf("%d", &x);
a[x] = i;
ans = x;
}
for (int i = ; i < ; i++) {
if (a[i] != - && a[i] < a[ans]) ans = i;
}
printf("%d\n", ans);
return ;
}

Petya and Catacombs

记录之前每个房间的最近访问时间,对每一个数字如果能用之前的房间来凑就先凑,凑不了就增加一个新房间。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
using namespace std;
int cmp(const void * x, const void * y) {
//x < y
return (*((double *)(x))) > (*((double *)(y))) ? : -;
}
int a[];
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int ans = ;
a[] = ;
int n, x;
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", &x);
if (a[x] > ) {
a[x]--;
a[i]++;
} else {
ans++;
a[i]++;
}
}
printf("%d\n", ans);
return ;
}

Restoration of string

  • If some string is the most frequent then all its substrings are the most frequent too.
  • If string ab or similar is the most frequent then letter a is always followed by letter b and b always follow a.
  • Let's consider directed graph on letters where edge a → b exists only if ab is the most frequent. If there is cycle in such graph then good string doesn't exist.
  • So such graph can be represented as several non-intersecting paths. All strings which correspond to paths must occur in non-empty good string. So if we print them in lexicographical order then we will get the answer.

有3个判定条件:每个点入度不超过1;每个点出度不超过1;不能存在环。

按字典序输出所有路径

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
using std::vector;
using std::sort;
int cmp(const void * x, const void * y) {
//x < y
return (*((double *)(x))) > (*((double *)(y))) ? : -;
}
bool v[], g[];
int next[], pre[];
char str[];
bool dfs(int x) {
if (g[x]) return false;
g[x] = true;
if (next[x] == ) return true;
return dfs(next[x]);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
int n, len;
while (scanf("%d", &n) != EOF) {
memset(next, , sizeof(next));
memset(pre, , sizeof(pre));
memset(v, false, sizeof(v));
bool flag = true;
for (int i = ; i < n; i++) {
scanf("%s", str);
len = strlen(str);
for (int j = ; j < len - ; j++) {
v[str[j]] = true;
if (next[str[j]] == ) next[str[j]] = str[j + ];
else if (next[str[j]] != str[j + ]) flag = false;
if (pre[str[j + ]] == ) pre[str[j + ]] = str[j];
else if (pre[str[j + ]] != str[j]) flag = false;
}
v[str[len - ]] = true;
}
for (int i = 'a'; i <= 'z'; i++) {
memset(g, false, sizeof(g));
if (!dfs(i)) flag = false;
}
if (!flag) printf("NO\n");
else {
len = ;
for (int i = 'a'; i <= 'z'; i++) {
if (v[i]) {
bool root = true;
for (int j = 'a'; j <= 'z'; j++) if (next[j] == i) root = false;
if (!root) continue;
int ptr = i;
while (ptr != ) {
str[len++] = ptr;
v[ptr] = false;
ptr = next[ptr];
}
}
}
str[len] = '\0';
printf("%s\n", str);
}
}
return ;
}

Maximum Element

You asked to find the number of permutations p of length n such that exists index i, such that pi ≠ npi is greater than any pj for j in [1, i - 1] and greater then any pj for j in [i + 1, i + k]. We will call such permutations good.

Define D(n) as number of good permutations that have pn = n. Notice that if k ≥ n, then D(n) = 0. Let w be a permutations such that wn = n. If index of element n - 1 is lesser than n - k, then w is good. Otherwise if n - 1 index is j, j ≥ n - k, then because there are less then k elements between n - 1 and nw could be good only if i from the definition would be lesser than j. In that case permutation w1, ..., wj would form a good permutation of length j of some numbers with wj being the maximum.

Therefore the following equation is correct:

Which can be computed in O(n2), or in O(n) rewritten in the form

and using prefix sums for values .

The answer is than calculated as follows:

Complexity: O(n).

Solution

Symmetric Projections

原点到点p的投影点的长度可以表示为p的横纵坐标的线性组合,所以,如果点集对某一条直线投影后关于某个点中心对称,那么这个点是点集质心对这条直线的投影。

首先求出点集的质心,对于落在质心上的一个点或关于质心对称的一对点不影响结果,可以去掉。

若此时点集中点的数量为0,则有无数条直线满足题意。

否则,对于点集中第一个点P0,枚举投影后与其对称的点,最多n个,并验证相应直线是否符合题意。

Solution(这个代码可能会由于long long数据范围问题被cha,不过数据太弱,还是a了,就没再改了)

Mod Mod Mod

题意无法理解

Codeforces Round #445的更多相关文章

  1. Codeforces Round #445 Div. 1 C Maximum Element (dp + 组合数学)

    题目链接: http://codeforces.com/contest/889/problem/C 题意: 给你 \(n\)和 \(k\). 让你找一种全排列长度为\(n\)的 \(p\),满足存在下 ...

  2. Codeforces Round #445 Div. 1

    A:每次看是否有能走回去的房间,显然最多只会存在一个,如果有走过去即可,否则开辟新房间并记录访问时间. #include<iostream> #include<cstdio> ...

  3. Codeforces Round #445 D. Restoration of string【字符串】

    D. Restoration of string time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  4. Codeforces Round #445 C. Petya and Catacombs【思维/题意】

    C. Petya and Catacombs time limit per test 1 second memory limit per test 256 megabytes input standa ...

  5. Codeforces Round #445 B. Vlad and Cafes【时间轴】

    B. Vlad and Cafes time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. Codeforces Round #445 A. ACM ICPC【暴力】

    A. ACM ICPC time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  7. 【Codeforces Round #445 (Div. 2) D】Restoration of string

    [链接] 我是链接,点我呀:) [题意] 给你n个字符串. 让你构造一个字符串s. 使得这n个字符串. 每个字符串都是s的子串. 且都是出现次数最多的子串. 要求s的长度最短,且s的字典序最小. [题 ...

  8. 【Codeforces Round #445 (Div. 2) C】 Petya and Catacombs

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 看看时间戳为i的点有哪些. 每次优先用已经访问过的点. 如果不行就新创一个点. 注意新创点的时间戳也是i. [代码] #includ ...

  9. 【Codeforces Round #445 (Div. 2) B】Vlad and Cafes

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 傻逼模拟 [代码] #include <bits/stdc++.h> using namespace std; cons ...

随机推荐

  1. C# 聚合数据借口发短信的使用

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. spring学习地址

    http://developer.51cto.com/art/201006/205212_2.htm

  3. PAT_A1122#Hamiltonian Cycle

    Source: PAT A1122 Hamiltonian Cycle (25 分) Description: The "Hamilton cycle problem" is to ...

  4. Python数据分析----scipy稀疏矩阵

    一.sparse模块: python中scipy模块中,有一个模块叫sparse模块,就是专门为了解决稀疏矩阵而生.本文的大部分内容,其实就是基于sparse模块而来的 导入模块:from scipy ...

  5. swift-正则验证手机号码

    // 手机号验证正则表达式 func validateMobile(phoneNum:String)-> Bool { // 手机号以 13 14 15 18 开头 八个 \d 数字字符 let ...

  6. 【Leetcode】【简单】【169求众数】【JavaScript】

    题目 169. 求众数 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [ ...

  7. [bzoj3291] Alice与能源计划 (二分图最大匹配)

    传送门 Description 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验.为 了方便,我们可以将火星抽象成平面,并建立平面直角坐标系. ...

  8. linux基础随记

    1.cd 切换路径 cd ~vbird 进入这个用户的主目录cd ~ 进入root这个目录下cd .. 进入root上层目录cd - 进入root这个目录下cd /var/spool/mail 直接访 ...

  9. C#学习笔记_06_方法&函数

    06_方法&函数 方法的定义 方法就是一个功能的集合,可以把程序中某段具有特殊功能的代码提取出来: 声明方法 [ 访问权限修饰符 ] [ 其他的修饰符 ] 返回值类型 方法名 ( [形参列表] ...

  10. String Boot-thymeleaf使用(四)

    简介 Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本.,可以完全替代jsp,也是spring boot官方推荐 ...