给你一个串,你可以把 ? ? ? 换成任意字符,使得这个串最后只出现一次 a b a c a b a abacaba abacaba 。
暴力枚举 a b a c a b a abacaba abacaba 出现的位置。然后判断是否只出现一次。
string s;
int n;
string T = "abacaba";
bool check(string &a)
{
int cnt = 0;
rep(i, 0, n - 7)
{
if (a.substr(i, 7) == T)
cnt++;
}
return cnt == 1;
}
int main()
{
int t;
sd(t);
while (t--)
{
cin >> n >> s;
int flag = 0;
rep(i, 0, n - 7)
{
string ss = s;
bool ok = 1;
rep(j, 0, 6)
{
if (ss[i + j] != T[j] && ss[i + j] != '?')
{
ok = 0;
break;
}
ss[i + j] = T[j];
}
if (ok && check(ss))
{
rep(j, 0, n - 1)
{
if (ss[j] == '?')
ss[j] = 'z';
}
puts("Yes");
flag = 1;
cout << ss << endl;
break;
}
}
if (!flag)
puts("No");
}
return 0;
}
有三个整数 a , b , c a,b,c a,b,c 。满足 l < = a , b , c < = r l<=a,b,c<=r l<=a,b,c<=r 还有一个整数 m = n ∗ a + b − c m=n*a+b-c m=n∗a+b−c 。 n n n 是严格大于 0 0 0 的正整数。题面给定 l , r , m l,r,m l,r,m 。要求出 a , b , c a,b,c a,b,c 的值。
枚举 a a a , b + c b+c b+c 就是余数,让他们俩之间一个为下界判断输出合适的即可。
ll l, r, m;
int main()
{
int T;
sd(T);
while (T--)
{
slddd(l, r, m);
for (ll a = l; a <= r; ++a)
{
ll t = m / a;
ll p = m % a;
if (t > 0 && p <= r - l)
{
plddd(a, l + p, l);
break;
}
t++;
p = t * a - m;
if (t > 0 && p <= r - l)
{
plddd(a, l, l + p);
break;
}
}
}
return 0;
}
有 m m m 种花,每种花有第一次购买获得的数值与第 k k k次购买获得的数值 ( k > 1 ) (k>1) (k>1),问你买 n n n 朵花获得的最大数值是多少。
按照 a a a 从大到小排序,如果当前 b b b 比最大的 a a a 还要打那就全选这个。否则就找到一个比当前 b b b 大最接近他的 a a a 。所有的 a a a 都比这个 b b b 大,那就全都买 a a a .否则就买前面全部的一朵,然后剩下的都买当前的。
const int N = 1e6 + 50;
struct node
{
ll a, b;
} v[N];
bool cmp(node a, node b)
{
return a.a > b.a;
}
ll sum[N];
int main()
{
int t;
sd(t);
while (t--)
{
int n, m;
sdd(n,m);
rep(i, 1, m)
sdd(v[i].a,v[i].b);
sort(v + 1, v + 1 + m, cmp);
sum[0] = 0;
rep(i, 1, m)
sum[i] = sum[i - 1] + v[i].a;
ll res = 0;
rep(i, 1, m)
{
if (v[i].b >= v[1].a)
res = max(res, v[i].a + (n - 1) * v[i].b);
else
{
int l = 1, r = m, mid, ans;
while (l <= r)
{
mid = (l + r) >> 1;
if (v[mid].a > v[i].b)
l = mid + 1, ans = mid;
else
r = mid - 1;
}
if (ans >= n)
res = max(res, sum[n]);
else
{
ll tmp = sum[ans], nd = n - ans;
if (i > ans)
tmp += v[i].a, nd--;
tmp += v[i].b * nd;
res = max(res, tmp);
}
}
}
pld(res);
}
return 0;
}