poj 1200 (hash),poj1200hash
Crazy Search
| Time Limit: 1000MS |
|
Memory Limit: 65536K |
| Total Submissions: 23168 |
|
Accepted: 6513 |
Description
Many people like to solve hard puzzles some of which may lead them to madness. One such puzzle could be finding a hidden prime number in a given text. Such number could be the number of different substrings of a given size that exist in the text. As you soon will discover, you really need the help of a computer and a good algorithm to solve such a puzzle.
Your task is to write a program that given the size, N, of the substring, the number of different characters that may occur in the text, NC, and the text itself, determines the number of different substrings of size N that appear in the text.
As an example, consider N=3, NC=4 and the text "daababac". The different substrings of size 3 that can be found in this text are: "daa"; "aab"; "aba"; "bab"; "bac". Therefore, the answer should be 5.
Input
The first line of input consists of two numbers, N and NC, separated by exactly one space. This is followed by the text where the search takes place. You may assume that the maximum number of substrings formed by the possible set of characters does not exceed 16 Millions.
Output
The program should output just an integer corresponding to the number of different substrings of size N found in the given text.
Sample Input
3 4daababac
Sample Output
5
Hint
Huge input,scanf is recommended.
Source
Southwestern Europe 2002
題意:輸入n,m,和字元竄,給你字串出現字母的種數(m),問你長度為n的字串有多少種?
hash,看代碼吧
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>using namespace std;#define N 16000005char a[N];int n,m;int ha[N];int main(){ int i,j; while(~scanf("%d%d",&n,&m)) { scanf("%s",a); i=0; memset(ha,0,sizeof(ha)); int len=strlen(a); for(j=0;j<len;j++) { if(!ha[a[j]]) { ha[a[j]]=++i; if(i==m) break; } } int ans=0; for(i=0;i+n<=len;i++) { int temp=0; for(j=i;j<i+n;j++) { temp=temp*m+ha[a[j]]; } if(!ha[temp]) { ans++; ha[temp]=1; } } printf("%d\n",ans); return 0; } return 0;}
poj3349(C++) 狂AC,受不了了
你這代碼寫的...讓我眼花繚亂
首先,你的hash[]數組重定義了,C++保留字有hash,你把它改成別的,例如hashdef
還有,你的freopen函數寫的不安全,肯定會提示unsafe
要在代碼前面加上#pragma warning(disable:4996)
例如:
#include "stdafx.h"
#include<stdio.h>
#include<string>
#include<iostream>
#pragma warning(disable:4996)
#define prime 9999991
這樣整個程式就沒問題,我已經編譯通過。
poj 1002 教(pascal)
求題目啊,家裡電腦與poj屬性相衝,打不開。上題目絕對給標程+講解