昨晚没报上名导致没打,不过我这菜鸡,打不打貌似都一样......
目录
A:Bad Ugly Numbers
B:Maximums
C:Permutation Partitions
D:D1 - Prefix-Suffix Palindrome (Easy version)
题意:让你找出来一个n位数s,对于s的每一位,s都不是其倍数,并且不含0;
找到特殊组合即可;我找的2333333.......
#include
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin >>n;
if(n==1) cout <<-1<
题意:数列bi是数列ai减去数列ai的前缀最大值;现在给出了bi让你求ai;
首先x1=0;
a1=x1+b1; x2=max(x1,a1);
a2 =x2+b2; x3=max(x2,a2);
...............
递推即可:
#include
using namespace std;
int b[200005];
int main()
{
int n;
cin >>n;
for(int i=1;i<=n;i++) cin >>b[i];
int x=0;
for(int i=1;i<=n;i++)
{
int a=x+b[i];
cout <
题意:给出一个序列,然后让你划分成k个区间,求这k个区间最大值的和的最大值;并且求出划分区间的方法数;
和的最大值就是求前k大的数;理所应当每个区间最多并且只能包含一个这k个数中的一个;所以当两个数之间的距离位为s时,那么这两个数的划分方法数是s+1;枚举连乘即可;
#include
using namespace std;
typedef long long ll;
const int mod=998244353;
struct node
{
ll x,id;
}bb[200005];
map mp;
int main()
{
int n,k;
cin >>n>>k;
priority_queue q;
for(int i=0;i>bb[i].x;
bb[i].id=i;
q.push(bb[i].x);
}
ll sum=0,res=k,ans=1;
while(res--) sum+=q.top(),mp[q.top()]=1,q.pop();
vector v;
for(int i=0;i
题意:对于字符串s,取其前缀s1和后缀s2,然后相加构成字符串 t = s1 + s2;求t的最大长度;
原理:T + 回文 + reverse(T)
用双指针先找出来前后对应的字符;然后对于中间的字符串,求出长度最大的前缀或者后缀回文字符串;
#include
using namespace std;
typedef long long ll;
const int mod=998244353;
string s;
bool check(int l,int r)
{
while(l<=r&&s[l]==s[r]) l++,r--;
return l>r;
}
int main()
{
int t ;
cin >>t;
while(t--)
{
cin >>s;
int l=0,r=s.size()-1;
while(l=l;j--) if(check(l,j)) break;
int ll , rr;
if(r-i>j-l) rr=r,ll=i;
else rr=j,ll=l;
for(int i=0;i