2016"百度之星" - 资格赛(Astar Round1)
逆元 1001 Problem A
求前缀哈希和逆元
#include <bits/stdc++.h> typedef long long ll;
const int MOD = 9973;
const int N = 1e5 + 5;
int inv[MOD+5];
int ha[N];
char str[N];
int n; void Inv(int n, int p) {
inv[1] = 1;
for (int i=2; i<=n; ++i) {
inv[i] = (ll) (p - p / i) * inv[p%i] % p;
}
} void init_hash() {
ha[0] = 1;
for (int i=1; i<=n; ++i) {
ha[i] = (ll) ha[i-1] * (str[i] - 28) % MOD;
}
} int main() {
Inv (MOD, MOD);
int q;
while (scanf ("%d", &q) == 1) {
scanf ("%s", str + 1);
n = strlen (str + 1);
init_hash ();
for (int i=0; i<q; ++i) {
int l, r; scanf ("%d%d", &l, &r);
printf ("%d\n", (ll) ha[r] * inv[ha[l-1]] % MOD);
}
}
return 0;
}
dp 1002 Problem B
状态转移方程:dp[i] = dp[i-1] + dp[i-2],Java写大数
import java.math.*;
import java.io.*;
import java.util.*; public class Main { public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger[] dp = new BigInteger[205];
dp[1] = BigInteger.ONE;
dp[2] = BigInteger.ONE.add(BigInteger.ONE);
for (int i=3; i<=200; ++i) {
dp[i] = dp[i-1].add(dp[i-2]);
} Scanner cin = new Scanner (System.in);
int n;
while (cin.hasNext ()) {
n = cin.nextInt ();
System.out.println (dp[n]);
}
} static class InputReader {
public BufferedReader reader;
public StringTokenizer tokenizer; public InputReader(InputStream stream) {
reader = new BufferedReader(new InputStreamReader(stream), 32768);
tokenizer = null;
} public String next() {
while (tokenizer == null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(reader.readLine());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
} public int nextInt() {
return Integer.parseInt(next());
}
} }
字典树 1003 Problem C
1、insert : 往神奇字典中插入一个单词 2、delete: 在神奇字典中删除所有前缀等于给定字符串的单词 3、search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串
字典树删除操作,按出现的次数,在前缀路径上依次删除,最后的扩展结点清空.
#include <cstdio>
#include <cstring>
#include <algorithm> const int N = 1e5 + 5;
char oper[10];
char str[35];
const int NODE = N * 30;
struct Trie {
int ch[NODE][26], val[NODE];
int sz;
void clear() {
memset (ch[0], 0, sizeof (ch[0]));
sz = 1;
}
int idx(char c) {
return c - 'a';
}
void insert(char *s) {
int u = 0;
for (int c, i=0; s[i]; ++i) {
c = idx (s[i]);
if (!ch[u][c]) {
memset (ch[sz], 0, sizeof (ch[sz]));
val[sz] = 0;
ch[u][c] = sz++;
}
u = ch[u][c];
val[u]++;
}
}
void del(char *s, int num) {
int u = 0;
for (int c, i=0; s[i]; ++i) {
c = idx (s[i]);
u = ch[u][c];
val[u] -= num;
}
memset (ch[u], 0, sizeof (ch[u]));
}
int _search(char *t) {
int u = 0;
for (int c, i=0; t[i]; ++i) {
c = idx (t[i]);
if (!ch[u][c]) {
return 0;
}
u = ch[u][c];
}
return val[u];
}
};
Trie trie; int main() {
int n;
while (scanf ("%d", &n) == 1) {
trie.clear ();
for (int i=0; i<n; ++i) {
scanf ("%s%s", oper, str);
if (oper[0] == 'i') {
trie.insert (str);
} else if (oper[0] == 'd') {
int cnt = trie._search (str);
if (cnt > 0) {
trie.del (str, cnt);
}
} else {
int cnt = trie._search (str);
if (cnt > 0) {
puts ("Yes");
} else {
puts ("No");
}
}
}
}
return 0;
}
STL 1004 Problem D
map或者双hash
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std; const int N = 1e6 + 10;
const int MOD = 1e9 + 7;
char str[45];
int a[45];
std::map<string, int> mp; int main() {
int n; scanf ("%d", &n);
mp.clear ();
string str;
for (int i=0; i<n; ++i) {
cin >> str;
sort (str.begin (), str.end ());
printf ("%d\n", mp[str]);
mp[str]++;
}
return 0;
}
2016"百度之星" - 资格赛(Astar Round1)的更多相关文章
- 2016百度之星 资格赛ABCDE
看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...
- HDU 5688:2016"百度之星" - 资格赛 Problem D
原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5686:2016"百度之星" - 资格赛 Problem B
原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5685:2016"百度之星" - 资格赛 Problem A
原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others) ...
- 2016"百度之星" - 资格赛(Astar Round1) 1004
思路:题目很简单,直接用map记录每个字符串的个数就可以了.记得对每个字符串先sort(). AC代码: #include <cstdio> #include <stdlib.h&g ...
- 2016"百度之星" - 资格赛(Astar Round1) 1001
思路:第一个做法就是:每读入起始位置i和结束位置j,就从这位置i到位置j计算,可是TLE了,后面我想想要是我输入一个最长的字符串,且以最大次数计算开始位置1到结束位置100000,那么这计算量是很大的 ...
- 2016"百度之星" - 资格赛(Astar Round1) Problem E
简单模拟题,耐心写就能过. #include <stdio.h> #include <math.h> #include<cstring> #include<c ...
- 2016"百度之星" - 资格赛(Astar Round1) Problem C
字典树. 插入的时候update一下节点出现的次数. delete的时候,先把前缀之后的全删了.然后看前缀最后一个节点出现了几次,然后前缀上每个节点的次数都减去这个次数. 前缀从上到下再检查一遍,如果 ...
- 2016"百度之星" - 资格赛(Astar Round1) Problem D
排个序,map直接搞. #include <stdio.h> #include <math.h> #include<cstring> #include<cma ...
随机推荐
- Nodejs - 如何用 eventproxy 模块控制并发
本文目标 本文的目标是获取 ZOJ 1001-1010 每道题 best solution 的作者 id,取得数据后一次性输出在控制台. 前文 如何用 Nodejs 分析一个简单页面 我们讲了如何用 ...
- iOS获取设备唯一标识的8种方法
8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可 ...
- Bash 是如何从环境变量中导入函数的
在上文中曾说到: 所谓的环境变量的真实面目其实就是个任意字符串 Bash 在启动时会将 environ 数组中包含 = 号的字符串导入成为自己的变量 Bash 在启动外部命令时会将自己内部标记为环境变 ...
- [Machine Learning & Algorithm] 随机森林(Random Forest)
1 什么是随机森林? 作为新兴起的.高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来 ...
- HTML5 data-* 属性
HTML5 data-* 属性 jQuery Mobile 依赖 HTML5 data-* 属性来支持各种 UI 元素.过渡和页面结构.不支持它们的浏览器将以静默方式弃用它们.表 2 显示如何使用 d ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- PHP的继承方法如何获取子类名?get_class() 和 get_called_class()
PHP里的__CLASS__这类东西是静态绑定的,如果不在子类里重载的话,那么继承父类方法所得到的依旧是父类的名称,而不是子类的名称,比如: <?php class A { function _ ...
- Shell入门教程:流程控制(6)while 循环
while循环的语法: while 条件测试 do 命令区域 done 举例: #!/bin/bash declare -i i=1 declare -i sum=0 while ((i< ...
- 限制帐号同时两处以上登录-ASP.NET
///登录页面 Hashtable haol = (Hashtable)Application["olTable"]; if (haol == null) { haol = new ...
- netty 解析http请求 post
http://blog.csdn.net/neosmith/article/details/50383548