1.emmmm,牛客这场多校题目还是挺平和的,但是,由于队伍状态不是很好+玄学卡常所以没打好。

2.首先上来时字符串,这个之前写过最长的相等01串,子序列就是01出现的次数取个最小值的2倍。然后随便写写ac了。用的是dp写的,看了其他大佬把1看作1,0看作-1,然后计算前缀和也挺好的。

3.然后是H,由于整点,把点Hash一下。取个中间值即可。当时写了一个扫描线的写法,T了。。。。。。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N1 = 10001;
const ll N2 = 2;
const int maxn = 1e4 + 10;
ll a[maxn];
const int N = 10100;
int main() {

int T;
scanf("%d", &T);
while(T--)
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int x, y;
scanf("%d%d", &x, &y);
a[i] = x * N1 + y * N2;
}
sort(a, a + n);
int z = a[n / 2 - 1] + 1;
int x0 = z % 2 ;
int y0 = (z - N1 * x0) / 2;
printf("%d %d %d %d\n", x0, y0, x0 - 2, y0 + N1);
}
}

4.H和J就很秀了,队友各写一个,早就写好了,但是一直T.NlogN的写法T了,O(N)的写法也T了,他俩在疯狂的怀疑人生,平时用的都是cin关同步,然后改了一下scanf就AC了。也太秀了吧,卡了三个小时。

5.我把水题切完就去了D。其实我最开始看的就是D,因为我看了就知道这个题目怎么搞,之前做过,但是我觉得不是一个前期题,谁知道比我上次做的简单了不少。。。。。。就不再推了,把xxxxxx变成(x/9*pow(10,n)-1)是一个套路,初中数学的脑经急转弯题,如果这里都转化不了,这题估计大概率做不出来。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, p, m, a[110], b[110], r, cnt;
ll calc(ll x)
{
cnt = 0;
int j = 2;
while (j * j <= x)
{
if (x % j == 0)
{
++cnt;
a[cnt] = j;
b[cnt] = 0;
while (x % j == 0) ++b[cnt], x /= j;
}
j++;
}
if (x > 1) {
++cnt;
a[cnt] = x; b[cnt] = 1;
}
return 0;
}
ll qmul(ll m, ll n, ll mod)
{
ll ans = 0;
while (n)
{
if (n & 1)
{
ans = ans + m;
ans %= mod;
}
m = (m + m) % mod;
n >>= 1;
}
return ans;
}
ll qpow(ll a, ll b, ll p)
{
ll res = 1;
while (b)
{
if (b & 1)
res = qmul(res, a, p);
a = qmul(a, a, p);
res %= p;
a %= p;
b >>= 1;
}
return res;
}
ll qpow(ll a, ll b)
{
ll res = 1;
while (b)
{
if (b & 1)res = res * a;
a = a * a;
b >>= 1;
}
return res;
}
ll solve(ll n, ll m, ll x) {
calc(x);
ll mx = 0, ans = 0;
for (int i = 1; i <= cnt; i++) mx = max(mx, b[i]);
for (int i = 1; i <= min(mx, m); i++)
{
ll res = 1;
for (int j = 1; j <= cnt; j++)
{
int s = (b[j] + i - 1) / i;
res = res *qpow(a[j], s);
}
ans += n / res;
}
if (m > mx)
{
ll ret = 1;
for (int j = 1; j <= cnt; j++) ret = ret * a[j];
ans += (m - mx) * (n / ret);
}
return ans;
}
ll gao(ll n)
{
ll s = sqrt(n);
vector<ll>v;
for (ll i = 1; i <= s; i++)
{
if (n % i != 0)
continue;
v.push_back(n / i);
if (qpow(10, i, 9 * p) == 1)
return i;
}
for (ll i = v.size() - 1; i >= 0; i--)
{
if (qpow(10, v[i], 9 * p) == 1)
return v[i];
}
return -1;
}


int main() {
int T; cin >> T;
while (T--)
{
cin >> p >> n >> m;
if (p == 2 || p == 5)
{
puts("0");
continue;
}
r = gao(6 * (p - 1));
cout << solve(n, m, r) << endl;
}
}

其他题目还没补,状态当时不好,可能是前天的HDU太菜了所致。