国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

poj Parity game(帶權(quán)并查集)(hash離散化)

2019-11-06 06:29:15
字體:
供稿:網(wǎng)友
Parity game

Description

Now and then you play the following game with your friend. Your friend writes down a sequence consisting of zeroes and ones. You choose a continuous subsequence (for example the subsequence from the third to the fifth digit inclusively) and ask him, whether this subsequence contains even or odd number of ones. Your friend answers your question and you can ask him about another subsequence and so on. Your task is to guess the entire sequence of numbers. You suspect some of your friend's answers may not be correct and you want to convict him of falsehood. Thus you have decided to write a PRogram to help you in this matter. The program will receive a series of your questions together with the answers you have received from your friend. The aim of this program is to find the first answer which is provably wrong, i.e. that there exists a sequence satisfying answers to all the previous questions, but no such sequence satisfies this answer.

Input

The first line of input contains one number, which is the length of the sequence of zeroes and ones. This length is less or equal to 1000000000. In the second line, there is one positive integer which is the number of questions asked and answers to them. The number of questions and answers is less or equal to 5000. The remaining lines specify questions and answers. Each line contains one question and the answer to this question: two integers (the position of the first and last digit in the chosen subsequence) and one Word which is either `even' or `odd' (the answer, i.e. the parity of the number of ones in the chosen subsequence, where `even' means an even number of ones and `odd' means an odd number).

Output

There is only one line in output containing one integer X. Number X says that there exists a sequence of zeroes and ones satisfying first X parity conditions, but there exists none satisfying X+1 conditions. If there exists a sequence of zeroes and ones satisfying all the given conditions, then number X should be the number of all the questions asked.

Sample Input

1051 2 even3 4 odd5 6 even1 6 even7 10 odd

Sample Output

3ps:和hdu 3038類似,根據(jù)d(i,j]+d(j,k]=d(i,k],就可以把所有的點通過與根節(jié)點的關(guān)系聯(lián)系起來了但是這道題最大的問題不在這里,而是它的數(shù)據(jù)太大了,所以需要離散化一下,但是,從沒有用過hash離散的我到哪離散去0.0搜了一下離散化的博客,但是要么只是告訴離散的方法,要么就是離散化的代碼寫了幾百行0.0,就不能來個簡單點的大哭最后還是看了本題的題解才略微明白了一點什么叫離散化可以看到本題中的區(qū)間范圍很大,但是輸入的點卻最多只有5000*2個,所以可以從這里入手,建立映射關(guān)系比如建立一個f(x)的映射關(guān)系,把每一個輸出的點都存入f(x)函數(shù)中,所以f(x)函數(shù)最多只有5000*2個數(shù),而后我們查詢的時候只需要借用他們映射的位置,通過其位置來實現(xiàn)對數(shù)據(jù)的處理,也就是說我們所用的只是這5000*2個位置與數(shù)據(jù)的關(guān)系,這樣就實現(xiàn)了離散化(暫時我的離散化就是這樣的)代碼:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 10000+10struct node{    int u,v,w;} a[maxn];int pre[maxn],rank[maxn];int f[maxn];void init(int n){    for(int i=0; i<n; i++)    {        pre[i]=i;        rank[i]=0;    }}int Find(int x){    int temp=pre[x];    if(x==pre[x])        return x;    pre[x]=Find(temp);    rank[x]=(rank[x]+rank[temp])%2;    return pre[x];}int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        int i,cnt=0;        char s[10];        for(i=1; i<=m; i++)        {            scanf("%d%d %s",&a[i].u,&a[i].v,s);            a[i].u--;            if(!strcmp(s,"even"))                a[i].w=0;            else                a[i].w=1;            f[cnt++]=a[i].u;            f[cnt++]=a[i].v;        }        sort(f,f+cnt);        n=unique(f,f+cnt)-f;        init(n);        int sum=0;        for(i=1; i<=m; i++)        {            int x=lower_bound(f,f+n,a[i].u)-f;//查詢其位置            int y=lower_bound(f,f+n,a[i].v)-f;//            int fx=Find(x),fy=Find(y);            if(fx!=fy)            {                pre[fx]=fy;                rank[fx]=(rank[y]+a[i].w-rank[x])%2;//通過其位置來建立關(guān)系            }            else            {                if((abs(rank[x]-rank[y])%2)!=a[i].w)                    break;            }            sum++;        }        printf("%d/n",sum);    }    return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗田县| 闽清县| 合江县| 宜良县| 会昌县| 樟树市| 东莞市| 五河县| 都匀市| 武川县| 宜黄县| 子长县| 岫岩| 东乌珠穆沁旗| 和田县| 五峰| 临夏市| 方山县| 刚察县| 牟定县| 周口市| 富裕县| 新竹市| 旬邑县| 靖安县| 思茅市| 黑山县| 蒲江县| 中宁县| 大城县| 高淳县| 黑河市| 多伦县| 苏州市| 尼玛县| 大方县| 通辽市| 阜阳市| 宜宾市| 抚松县| 云南省|