逆元 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)的更多相关文章

  1. 2016百度之星 资格赛ABCDE

    看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...

  2. HDU 5688:2016"百度之星" - 资格赛 Problem D

    原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    ...

  3. HDU 5686:2016"百度之星" - 资格赛 Problem B

    原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others)    ...

  4. HDU 5685:2016"百度之星" - 资格赛 Problem A

    原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others)    ...

  5. 2016"百度之星" - 资格赛(Astar Round1) 1004

    思路:题目很简单,直接用map记录每个字符串的个数就可以了.记得对每个字符串先sort(). AC代码: #include <cstdio> #include <stdlib.h&g ...

  6. 2016"百度之星" - 资格赛(Astar Round1) 1001

    思路:第一个做法就是:每读入起始位置i和结束位置j,就从这位置i到位置j计算,可是TLE了,后面我想想要是我输入一个最长的字符串,且以最大次数计算开始位置1到结束位置100000,那么这计算量是很大的 ...

  7. 2016"百度之星" - 资格赛(Astar Round1) Problem E

    简单模拟题,耐心写就能过. #include <stdio.h> #include <math.h> #include<cstring> #include<c ...

  8. 2016"百度之星" - 资格赛(Astar Round1) Problem C

    字典树. 插入的时候update一下节点出现的次数. delete的时候,先把前缀之后的全删了.然后看前缀最后一个节点出现了几次,然后前缀上每个节点的次数都减去这个次数. 前缀从上到下再检查一遍,如果 ...

  9. 2016"百度之星" - 资格赛(Astar Round1) Problem D

    排个序,map直接搞. #include <stdio.h> #include <math.h> #include<cstring> #include<cma ...

随机推荐

  1. PostgreSQL Apt Repository

    PostgreSQL Apt Repository If the version included in your version of Ubuntu is not the one you want, ...

  2. golang笔记——函数与方法

    如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...

  3. ORACLE 触发器

    •1.1 触发器类型 • DML触发器 • 替代触发器 • 系统触发器 •1.2 创建触发器 • 触发器触发次序 • 创建DML触发器 • 创建替代(INSTEAD OF)触发器 • 创建系统事件触发 ...

  4. asp.net数据控件遍历 获取当前索引

    Gridview 数据访问遍历1.for遍历for (int i = 0; i <= GridView1.Rows.Count - 1; i++)//为gv的每一行增加js事件{   TextB ...

  5. JavaScript访问ab页面定时跳转代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Qt界面中嵌入其他exe程序的界面,使用Qt5

    下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/4 ...

  7. jquery----常用的函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. ServletConfig 可以做啥

    1.获得 servlet配置的servletname 2.获得servlet 配置的  getInitParameter("keyname") 3.获得servlet配置的 所有的 ...

  9. 去哪儿网输入框三种输入方式(selenium webdriver 干货)

    在机票预定的页面,输入出发城市和到达城市输入框的时候, 发现直接使用sendkeys不好使, 大部分情况出现输入某城市后没有输入进去, 经过几天的研究,发现可以采取三种方式: 1. 先点击输入框,待弹 ...

  10. ACM/ICPC 之 混合图的欧拉回路判定-网络流(POJ1637)

    //网络流判定混合图欧拉回路 //通过网络流使得各点的出入度相同则possible,否则impossible //残留网络的权值为可改变方向的次数,即n个双向边则有n次 //Time:157Ms Me ...