HDU 4339 Query

算法:

比賽時沒有想到好的算法,暴力是O( Q * N )肯定超時。

賽后,線段樹,樹狀數組,HASH都能AC,想了下,的確用樹狀數組

時間復雜度就可以優化到O(Q * lgN * lgN)

2000msAC.。。

View Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
#define MAXN 2000100
char str1[MAXN],str2[MAXN],str[10];
int  dx[MAXN];
int N, lenmax, lenmin;int lowbit( int x )
{    return x&-x;   
}void add( int x, int val, int M)
{while( x <= M ){dx[x] += val;x += lowbit(x);}     }int sum( int x )
{int num = 0;while( x > 0 ){num += dx[x];x -= lowbit( x );      }   return num;  
}void pre( )
{int i = 1;int len1 = strlen(str1+1), len2 = strlen(str2+1);lenmin = len1 < len2 ? len1 : len2;while( i <= len1 ){if( str1[i] == str2[i] ){add(i, 1, lenmin);   }     i++;       }          
}bool jugde(int start, int x)
{int x1 = sum(start+x-1) - sum(start-1);if( x1 == x )return true;return false;
}int find( int l, int r, int start)
{int ans = 0;while( l <= r ){int mid = (l + r)/2;if( jugde(start,mid) ){ans = mid;l = mid + 1;    }else r = mid - 1; }return ans;  
}int main( )
{int T, a, b, c, ans = 1;scanf("%d",&T);while( T-- ){scanf("%s%s",str1+1,str2+1);      scanf("%d",&N);memset(dx,0,sizeof(dx));pre( );printf("Case %d:\n",ans++);for( int i = 1; i <= N; i++){scanf("%d",&a);if( a == 2 ){scanf("%d",&b);b++;printf("%d\n",find(0,lenmin,b));}else{ scanf("%d%d%s",&b,&c,str);c++;  if( str1[c] == str2[c] && str[0] != str1[c] ){add(c,-1,lenmin);if( b == 1 )str1[c] = str[0];elsestr2[c] = str[0];}else if( str1[c] != str2[c] ){if( b == 1 ){if( str2[c] == str[0] ){add(c,1,lenmin);   str1[c] = str[0];     }elsestr1[c] = str[0];    }else if( b == 2 ){if( str1[c] == str[0] ){add(c,1,lenmin);   str2[c] = str[0];     }     elsestr2[c] = str[0];  }     } }}     }return 0;
}

HASH,要用到差值取模,時間復雜度為O( Q * lgN),寫了一兩個小時,還在調試中。。代碼能力弱啊。。。

明天繼續搞。。

郁悶啊。。從下到上的最大長度寫了N久沒寫出,自己感覺真的不好寫,從上到下真的很好寫,利用回溯,寫起來真的方便,自己。。

一直被標程的從下到上困擾,真的二,忘記了還可以從上到下。thanks 旭。。

View Code
#pragma comment(linker, "/STACK:16777216")
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
#define MAXN 1000010
#define Prime 29
#define LL long long
struct node
{int left, right;LL w1,w2;
}seg[MAXN<<4];
char str1[MAXN], str2[MAXN], str[10];
LL P[MAXN];
int num[MAXN], nmax;void pre( )
{P[0] = 1;for( int i = 1;  i <= 1000005; i++)P[i] = P[i-1] * Prime;     }void build( int l, int r, int root )
{int mid = (l + r) / 2;seg[root].left = l;seg[root].right = r;if( l == r ){seg[root].w1 = str1[l];seg[root].w2 = str2[l];num[l] = root;return;  }build(l, mid, root * 2 );build(mid+1,r,root * 2 + 1);seg[root].w1 = seg[root << 1].w1 + seg[(root<<1)+1].w1 * P[( seg[root<<1].right - seg[root<<1].left + 1)];seg[root].w2 = seg[root << 1].w2 + seg[(root<<1)+1].w2 * P[( seg[root<<1].right - seg[root<<1].left + 1)];
}void Modify( int root, int x, char c, int f)
{int mid = (seg[root].left + seg[root].right) / 2;int l = seg[root].left;int r = seg[root].right;if( l == x && r == x ){if( f == 1 )seg[root].w1 = c ;elseseg[root].w2 = c ;return;}if( x > mid )Modify( (root << 1) + 1, x, c, f);elseModify( root << 1, x, c, f);if( f == 1 )seg[root].w1 = seg[root << 1].w1 + seg[(root<<1)+1].w1 * P[( seg[root<<1].right - seg[root<<1].left + 1)];elseseg[root].w2 = seg[root << 1].w2 + seg[(root<<1)+1].w2 * P[( seg[root<<1].right - seg[root<<1].left + 1)];            
}int find( int p)
{if( seg[p].w1 == seg[p].w2 ){return seg[p].right - seg[p].left + 1;  }else if( seg[p].left != seg[p].right ){int ret = find( p << 1);if( ret == seg[p<<1].right - seg[p<<1].left + 1 ){ret +=  find( (p << 1) + 1);    }return ret;  }elsereturn 0;
}int sum( int p, int x)
{if( seg[p].left == seg[p].right ){if( seg[p].w1 == seg[p].w2 ){return 1;    }   elsereturn 0;   }    else{int mid = (seg[p].left + seg[p].right) / 2, ret;if( x <= mid ){ret = sum( p << 1, x );if( ret == seg[p<<1].right - x + 1 ) //左子樹滿的
         {ret += find((p << 1) + 1);} }    else{ret = sum( (p << 1) + 1, x );    }return ret; }  
}int main( )
{int N,T, a, b, c, abc = 1;scanf("%d",&T);pre( );while( T-- ){scanf("%s%s",str1,str2);scanf("%d",&N);int len1 = strlen(str1);int len2 = strlen(str2);nmax = len1 < len2 ? len1 : len2;build(0,nmax-1,1);printf("Case %d:\n",abc++);for( int i = 1; i <= N; i++){scanf("%d",&a);if( a == 2 ){scanf("%d",&b);if( b >= nmax ){puts("0");continue;    }printf("%d\n",sum(1,b));        }else{scanf("%d%d%s",&b,&c,str);if( c >= nmax ){// puts("0");continue;}Modify(1,c,str[0], b);}}}return 0;
}

轉載于:https://www.cnblogs.com/tangcong/archive/2012/08/03/2622337.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248234.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248234.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

201904快速閱讀術

在看過了幾本數之后&#xff0c;發現原來培養讀書的習慣好像也不太難&#xff0c;“將讀書融入生活&#xff0c;框定讀書時間” 生活中&#xff0c;我確實也是這樣執行了。利用每天上下班的時間聽書&#xff0c;有些覺得可以讀快的書籍用了1.5倍速度在聽&#xff0c;難懂的部分…

js(Dom+Bom)第二天(2)

webAPI 00-操作圖片 知識點-獲取圖片src屬性 圖片對象.src ----> 獲取圖片路徑注意: 1. 獲取到的圖片路徑是一個絕對路徑知識點-動態的給圖片標簽設置路徑 圖片對象.src 圖片路徑;注意: 1.可以設置絕對路徑(不推薦) 2.可以設置相對路徑課堂案例-切換圖片案例 01-操作標…

javaScript今日總結

javascript簡單介紹ECMAScript 1.語法 2.變量&#xff1a;只能使用var定義&#xff0c;如果在函數的內容使用var定義&#xff0c;那么它是一個局部變量&#xff0c;如果沒有使用var它是一個全局的。弱類型&#xff01; 3.數據類型&#xff1a;原始數據類型(undefined/null/stri…

使用Connector / Python連接MySQL/查詢數據

使用Connector / Python連接MySQL connect()構造函數創建到MySQL服務器的連接并返回一個 MySQLConnection對象 在python中有以下幾種方法可以連接到MySQL數據庫&#xff1a; 1.使用connect&#xff08;&#xff09;構造函數import mysql.connectorcnx mysql.connector.connect…

最簡方式 表格編輯 基于 el-table

共下面5點1.新增一個顯示和隱藏的參數2.在顯示那邊新增一個input框&#xff0c;用v-model綁定數據&#xff0c;用v-if來顯示和隱藏3.給之前的顯示的span標簽添加v-else 和上面形成if else4.編輯和保存按鈕同理&#xff0c;然后編輯按鈕觸發的任務將所有輸入打開。即seen置為tru…

js(Dom+Bom)第三天(1)

JavaScript-DOM 節點的層次結構 hasChildNodes() 【父元素中是否包含子節點】 dom.hasChildNodes() 總結&#xff1a;1.該方法返回的是一個布爾類型的結果用來判斷當前元素中是否存在子節點。2.該方法會將元素中所有的節點都獲取&#xff08;包括空格&#xff0c;回車符&#…

Spring Boot 自動配置原理

自動配置原理配置文件到底能寫什么&#xff1f;怎么寫&#xff1f;自動配置原理&#xff1b; 參考&#xff1a;https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#common-application-properties配置文件能配置的屬性參照1、自動配置原理&#xff…

這 4 款實用小工具,能讓你的電腦變得好用又騷氣

在日常生活中&#xff0c;我們總會遇到一些重復又繁瑣的工作&#xff0c;它們不僅容易令人煩躁&#xff0c;也極大拖累了咱們的效率。其實&#xff0c;咱們完全可以通過一些工具提升效率&#xff0c;為自己節約出大量時間來干別的~今天就再給大家推薦 4 個免費的 Windows 平臺的…

js(Dom+Bom)第三天(2)

webAPI 0-操作標簽屬性 系統屬性 作用: 1. 可以操作標簽身上的任何一個系統中的自帶屬性 (id, class, name ....) 2. 還可以操作用戶自定義的屬性dom.getAttribute(屬性名)&#xff1b; 作用: getAttribute(屬性名) 方法 就是用來獲取標簽身上屬性的備注: 1. getAttribute() 方…

xshell使用指南

shell使用指南 ZMODEM功能 yum install lrzsz rz 上傳 sz 下載 快捷鍵 alt o 打開終端 alt 1-9 切換 ctrl alt 切換 ctrl shift n 打開新選項卡 vim的小鍵盤不能使用的問題 在會話的屬性中&#xff0c;將VT模式的初始數字鍵盤設置為普通 配色方案 保存成xcs文件&#xff0c…

C#Socket編程詳解(一)TCP與UDP簡介

一、TCP與UDP&#xff08;轉載&#xff09; 1、TCP 1.1 定義 TCP&#xff08;TransmissionControl Protocol&#xff09;傳輸控制協議。 是一種可靠的、面向連接的協議&#xff08;eg:打電話&#xff09;、傳輸效率低全雙工通信&#xff08;發送緩存&接收緩存&#xff09;、…

動態創建表格數據

<input type"button" value"創建"><style>*{margin: 0;padding: 0;}table{width: 980px;margin: 50px auto;}table,th,tr,td{text-align: center;border: 1px solid #ccc;}</style><script>var heads [姓名, 年齡, 性別, 學號, 薪…

第四節:EF Core的并發處理

1.說明 和EF版本的并發處理方案一致&#xff0c;需要知道樂觀并發和悲觀并發的區別&#xff0c;EF Core只支持樂觀并發&#xff1b;監控并發的兩種方案&#xff1a;監測單個字段和監測整條數據&#xff0c;DataAnnotations 和 FluentApi的兩種配置方式。 &#xff08;PS&#x…

js(Dom+Bom)第四天(1)

webAPI 1-通過DOM節點方式獲取元素 1-0注意事項 下面的內容都在在文檔樹上直接操作的 (節點 元素)重點是: 與元素相關的內容1-1與父節點相關的操作方式 1-1-1.知識點-判斷父元素中是否有子節點 語法: DOM.hasChildNodes();總結: 該方法返回的是一個布爾類型的結果該方法會…

vue官方eslint插件配置eslint-plugin-vue-libs

由于eslint-config-vue已經被廢棄&#xff0c;于是總結了一下eslint-plugin-vue-libs的eslint config配置&#xff0c;如下&#xff1a; module.exports {extends: [plugin:vue/essential],plugins: [vue-libs],parserOptions: {parser: require.resolve(babel-eslint),ecmaVe…

JS中的prototype

JS中的phototype是JS中比較難理解的一個部分(轉自出處&#xff1a;&#xff08;http://www.cnblogs.com/yjf512/&#xff09;) 本文基于下面幾個知識點: 1 原型法設計模式 在.Net中可以使用clone()來實現原型法 原型法的主要思想是&#xff0c;現在有1個類A,我想要創建一個類B,…

微博發布案例

推薦在寫動態生成標簽數據的時候&#xff0c;提前寫一遍htmlcss的結構&#xff0c;方便提供寫照模板 <div class"box"><!-- 頂部搜索框 --><div class"inputBox"><textarea maxlength"200"></textarea></div&…

1.3 Go語言基礎之數據類型

Go語言中有豐富的數據類型&#xff0c;除了基本的整型、浮點型、布爾型、字符串外&#xff0c;還有數組、切片、結構體、函數、map、通道&#xff08;channel&#xff09;等。Go 語言的基本類型和其他語言大同小異。 一、整型 1.1 基本類型 整型分為以下兩個大類&#xff1a; 按…

Oracle新建用戶并授權

使用擁有dba權限的用戶都可以新建用戶以及授權 1、新建用戶 create user 用戶名 identified by 密碼&#xff1b; 2、授權 grant connect, resource to 用戶名; grant dba to 用戶名; 轉載于:https://www.cnblogs.com/langgj/p/11387485.html

【網絡安全】關于ARP攻擊的原理以及在Kali Linux環境下的實現

轉自&#xff1a;https://www.cnblogs.com/rebrust/p/6096101.html 全文摘要 本文講述內容分為兩部分&#xff0c;前半部分講述ARP協議及ARP攻擊原理&#xff0c;后半部分講述在Kali Linux環境下如何實現ARP攻擊以及ARP欺騙&#xff0c;如果對于ARP攻擊的背景和原理不感興趣的話…