国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

CCF-CSP 29次 第三題【202303-3 LDAP】

這篇具有很好參考價值的文章主要介紹了CCF-CSP 29次 第三題【202303-3 LDAP】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • 數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體數(shù)組、哈希表
  • struct User
    {
    	int DN; // 存儲用戶標號 
    	unordered_map<LL, LL> attr // 哈希表存儲屬性和值;
    }user[N];
    
  • 原子表達式:處理很簡單,利用string中的find()函數(shù)找到:~的位置下標,左邊為key,右邊為value,遍歷結(jié)構(gòu)體數(shù)組尋找匹配的用戶。
  • 表達式的邏輯組合:&(...)(...)括號內(nèi)也可以是邏輯組合,如&(|(1:2)(3~4))(101:202)。注意不會出現(xiàn)&(...)(...)(...)這種情況。處理思路是對于&(...)(...)提取左右括號內(nèi)的字串,并遞歸求解。
  • 更多實現(xiàn)的細節(jié)請見代碼中注釋。

官網(wǎng)運行截圖如下,本來是奔著解決前40分的,沒想到拿到了100分,但由于非常暴力,運行時間10s了。
CCF-CSP 29次 第三題【202303-3 LDAP】文章來源地址http://www.zghlxwxcb.cn/news/detail-459429.html

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <string>
 
using namespace std;

typedef long long LL;

const int N = 2510, M = 510;

int n, m;

struct User
{
	int DN;
	unordered_map<LL, LL> attr;
}user[N];

// 原子操作 
vector<int> match(string str)
{
	vector<int> res;
	if (str.find(":") != -1)
	{
		int loc = str.find(":");
		
		auto key = str.substr(0, loc);
		auto value = str.substr(loc + 1, str.size() - loc - 1);
		
		// str to int	
		int k = stoi(key);
		int v = stoi(value);
		
		for (int i = 0; i < n; i ++ )
		{
			if (user[i].attr.count(k))
				if (user[i].attr[k] == v)
					res.push_back(user[i].DN);
		}
		
		sort(res.begin(), res.end());
	}
	
	else if (str.find('~') != -1)
	{
		int loc = str.find('~');
		auto key = str.substr(0, loc);
		auto value = str.substr(loc + 1, str.size() - loc - 1);
		
		// str to int	
		int k = stoi(key);
		int v = stoi(value);
		
		for (int i = 0; i < n; i ++ )
		{
			if (user[i].attr.count(k))
				if (user[i].attr[k] != v)
					res.push_back(user[i].DN);
		}
		
		sort(res.begin(), res.end());
	}
	
	return res;
}

vector<int> match2(string str)  // &(|(1:2)(3~4))(101:202)
{
	vector<int> res;
	
	// 匹配 1:2 
	if (str[0] > '0' && str[0] <= '9') 
		return match(str); 
	
	// 匹配 &(...)(...) 
	else
	{
		char c = str[0];
		str.erase(0, 1);
		
		// 當左右括號數(shù)量相同時,得到子表達式 
		int len = str.size();
		string s;
		int loc;
		for (int i = 1; i <= len; i ++ )
		{
			s = str.substr(0, i);
			if (count(s.begin(), s.end(), '(') == count(s.begin(), s.end(), ')'))
			{
				loc = i;
				break;
			}
		}
		
		string sub_l = str.substr(1, loc - 2); // 左邊括號中字串 
		string sub_r = str.substr(loc + 1, str.size() - loc - 2); // 右邊括號中字串 
		
		vector<int> res_l = match2(sub_l); // 遞歸調(diào)用 
		vector<int> res_r = match2(sub_r);
		
		if (c == '&')
		{					
			vector <int> v_intersection;
			// 取交集 
			set_intersection(res_l.begin(), res_l.end(),
				res_r.begin(), res_r.end(),
				back_inserter(v_intersection));	
			return v_intersection;

		}
		
		else if (c == '|')
		{
			vector <int> v_union;
			// 取并集 
			set_union(res_l.begin(), res_l.end(),
				res_r.begin(), res_r.end(),
				back_inserter(v_union));	
			return v_union;
		}
	}
}

int main()
{
	scanf("%d", &n);
	
	for (int i = 0; i < n; i ++ )
	{
		int DN, cnt;
		scanf("%d%d", &DN, &cnt);
		user[i].DN = DN;
		
		while (cnt -- )
		{
			LL a, v;
			scanf("%lld%lld", &a, &v);
			user[i].attr[a] = v;
		}
	}
	
	scanf("%d", &m);
	while (m -- )
	{
		string str;
		cin >> str;
		
		vector<int> res;
		res = match2(str);
		
		sort(res.begin(), res.end());
		if (res.size() == 0) cout << endl;
		else
		{
			for (auto i: res) cout << i << " "; 
			cout << endl;
		}
	}
	return 0;
}

/*
2
1 2 1 2 2 3
2 2 2 3 3 1 
5
1:2
3~1
&(1:2)(2:3)
|(1:2)(3:1)
&(|(1:2)(3~4))(101:202)
*/

到了這里,關(guān)于CCF-CSP 29次 第三題【202303-3 LDAP】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • CCF-CSP認證 202303 500分題解

    CCF-CSP認證 202303 500分題解

    202303-1 田地丈量(矩形面積交) 矩形面積交=x軸線段交長度*y軸線段交長度 線段交長度,相交的時候是min右端點-max左端點,不相交的時候是0 202303-2?墾田計劃(二分) 二分最終答案x(x=k),判斷降到x天資源是否夠 夠的話就往小里二分,否則往大里二分, 當然貪心也可以做

    2023年04月18日
    瀏覽(116)
  • CCF-CSP歷年真題大全附題解(202303已更)

    ? ? ? ? ?各位朋友,歷年的題目你們要是有不同的解法想和大家進行分享的,可以私聊我發(fā)我題目編號和代碼,我也可以更新到文章中,給需要的朋友多點參考~~ ???? ?????CCF-CSP真題拿來練手,持續(xù)更新,CCF-CSP真題拿來練手,如果對自己沒有拿高分的期望的話,可以就

    2024年02月01日
    瀏覽(29)
  • CCF-CSP真題《202303-5 施肥》思路+python,c++滿分題解

    CCF-CSP真題《202303-5 施肥》思路+python,c++滿分題解

    想查看其他題的真題及題解的同學(xué)可以前往查看:CCF-CSP真題附題解大全 試題編號: 202303-5 試題名稱: 施肥 時間限制: 2.0s 內(nèi)存限制: 1.0GB 問題描述: 春天到了,西西艾弗島上的?n?塊田地需要施肥了。n?塊田地編號為?1,2,?,n,按照編號從小到大的順序排成一列。 為了給

    2024年02月09日
    瀏覽(134)
  • CCF-CSP真題《202303-1 田地丈量》思路+python,c++滿分題解

    CCF-CSP真題《202303-1 田地丈量》思路+python,c++滿分題解

    想查看其他題的真題及題解的同學(xué)可以前往查看:CCF-CSP真題附題解大全 試題編號: 202303-1 試題名稱: 田地丈量 時間限制: 1.0s 內(nèi)存限制: 512.0MB 問題描述: 西西艾弗島上散落著?n?塊田地。每塊田地可視為平面直角坐標系下的一塊矩形區(qū)域,由左下角坐標?(x1,y1)?和右上角

    2024年02月12日
    瀏覽(197)
  • CCF-CSP真題《202303-2 墾田計劃》思路+python,c++滿分題解

    CCF-CSP真題《202303-2 墾田計劃》思路+python,c++滿分題解

    想查看其他題的真題及題解的同學(xué)可以前往查看:CCF-CSP真題附題解大全 試題編號: 202303-2 試題名稱: 墾田計劃 時間限制: 1.0s 內(nèi)存限制: 512.0MB 問題描述: 頓頓總共選中了?n?塊區(qū)域準備開墾田地,由于各塊區(qū)域大小不一,開墾所需時間也不盡相同。據(jù)估算,其中第?i?塊

    2024年02月12日
    瀏覽(164)
  • CCF-CSP真題《202303-1 田地丈量》思路+python,c++,java滿分題解

    CCF-CSP真題《202303-1 田地丈量》思路+python,c++,java滿分題解

    想查看其他題的真題及題解的同學(xué)可以前往查看:CCF-CSP真題附題解大全 試題編號: 202303-1 試題名稱: 田地丈量 時間限制: 1.0s 內(nèi)存限制: 512.0MB 問題描述: 西西艾弗島上散落著?n?塊田地。每塊田地可視為平面直角坐標系下的一塊矩形區(qū)域,由左下角坐標?(x1,y1)?和右上角

    2024年02月09日
    瀏覽(108)
  • 2023CSP-CCF前三題 田地丈量、墾田計劃、LDAP解題分析

    2023CSP-CCF前三題 田地丈量、墾田計劃、LDAP解題分析

    2023.03第29次CCF-CSP計算機認證考試 CCF計算機軟件能力認證考試系統(tǒng) 大二菜鳥第一次參加CSP考試,發(fā)揮得很爛( 其實是實力太菜了 ),考前也沒看往年題目套路,有很多不甘吧,不過擬打算六月再參加一次。如果早知道題目難度是依次遞增的,就不寫完兩題就去啃最后一題了

    2024年02月05日
    瀏覽(22)
  • 第29次CCF CSP 認證題目 第一題 202303-1 田地丈量 C++實現(xiàn) 滿分答案

    第29次CCF CSP 認證題目 第一題 202303-1 田地丈量 C++實現(xiàn) 滿分答案

    西西艾弗島上散落著?n?塊田地。每塊田地可視為平面直角坐標系下的一塊矩形區(qū)域,由左下角坐標?(x1,y1)?和右上角坐標?(x2,y2)?唯一確定,且滿足?x1x2、y1y2。這?n?塊田地中,任意兩塊的交集面積均為?0,僅邊界處可能有所重疊。 最近,頓頓想要在南山腳下開墾出一塊面積

    2023年04月15日
    瀏覽(117)
  • CSP認證202303-3:LDAP (超詳細題解)

    CSP認證202303-3:LDAP (超詳細題解)

    題目傳送門 最后要求輸出符合條件的用戶 DN 的集合, ( 作為一名STL戰(zhàn)士 ) ,可以考慮維護以屬性名和屬性值為索引, 對應(yīng)值為符合條件的用戶的set 的一個map 屬性名 - 屬性值 - {用戶1,用戶2…} 操作分為原子操作和邏輯操作, 只需要判斷字符串的首字符即可區(qū)分兩種操作 原子操作

    2024年02月05日
    瀏覽(16)
  • CCF- CSP 202303-2墾田計劃 【多種方法】滿分題解

    CCF- CSP 202303-2墾田計劃 【多種方法】滿分題解 題目鏈接:CCF- CSP 202303-2墾田計劃 70分思路: 從基礎(chǔ)耗時最長的區(qū)域進行篩選,每次基礎(chǔ)耗時減少一天 該方法以 m 作為參考對象,對 m 進行減的操作( m 的數(shù)據(jù)范圍達到 1e9 ,導(dǎo)致超時) 采用 優(yōu)先隊列 作為存儲結(jié)構(gòu),同時存儲 t 和

    2024年02月01日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包