可以合理地想到從高到低依次列舉每一位的數,然後\(\text\)一下後面是否存在方案,問題在於如何快速check
設還還剩下的\(\mod 3=0,1,2\)的數個數分別為\(c[0..2]\)
設總共還需要\(n\)個,需要湊出\(\mod 3=t\)的方案
這時後我們假設列舉某乙個,比如我們列舉\(0\)選了\(i\)個,設還剩下\(n-i\)個要選,設剩下兩個選了\(y,x\)個,則有限制條件
\[x+y=n-i
\]\[2x+y = t \ (\mod 3)
\]把\(x\)帶掉,得到
\[2n-2i-2y+y=t (\mod 3)
\]\[y=2n-2i-t (\mod 3)
\]我們可以根據各種限制條件解出\(y\)的可行區間,然後判斷區間內是否存在乙個\(y\)即可
同時我們可以發現,隨\(i\)的增大,\(y\)的可行範圍也會增大,所以可以直接列舉最大的3個\(i\)就能完成check
#include#include#include#include#include#include#include#includeusing namespace std;
#define reg register
typedef long long ll;
#define rep(i,a,b) for(reg int i=a,i##end=b;i<=i##end;++i)
#define drep(i,a,b) for(reg int i=a,i##end=b;i>=i##end;--i)
#define pb push_back
template inline void cmin(t &a,t b)
template inline void cmax(t &a,t b)
const int n=1e5+10;
int n,m;
char s[n],ans[n];
int cnt[10],c[3];
int check(int n,int t)
return 0;
}int main()
cnt[j]++;
}if(!ans[i] || (i==1 && m>1 && ans[i]=='0') )
} ans[m+1]=0;
puts(!fl?"-1":ans+1);
}}
Nowcodercontest5278G血壓遊戲
做法非常多。比如對於同一層的點直接建立虛樹,然後模擬dp即可 如果不想建虛樹,可以直接維護合併,每次合併得到的 text 一定是同層點按照dfs序排序之後相鄰兩點的 text 之一 處理出所有這樣的lca,然後按照dep從大到小依次操作 用乙個set維護,每次取出子樹區間裡的點合併上來即可。不知道 ...
mysql5 2使用 5 2 使用MySQL資料庫
目前internet上流行的 構架方式是lamp,其中的m即mysql,作為資料庫,mysql以免費 開源 使用方便為優勢成為了很多web開發的後端資料庫儲存引擎。mysql驅動 go中支援mysql的驅動目前比較多,有如下幾種,有些是支援database sql標準,而有些是採用了自己的實現介面,...
mysql5 2使用 5 2 使用MySQL資料庫
目前internet上流行的 構架方式是lamp,其中的m即mysql,作為資料庫,mysql以免費 開源 使用方便為優勢成為了很多web開發的後端資料庫儲存引擎。mysql驅動 go中支援mysql的驅動目前比較多,有如下幾種,有些是支援database sql標準,而有些是採用了自己的實現介面,...