Codeforces Round #764 (Div. 3)


Codeforces Round #764 (Div. 3)
TMD,div3也能被暴打....呜呜呜!
写完了D,就卡壳了,真的是遇到困难睡大觉,真的去睡觉了...

E. Masha-forgetful

先来看E题,目标就是用一些字符串的某些区间去表示一个目标串。要求区间的长度至少为2.
我就说cf的构造题有意思吧。考虑倘若一个合法的可能解,那么他表示的这些区间,一定能分解为长度为2,3的小区间。所以我们只对目标串中的长度为2,3的小区间进行匹配,之后可以做一下DP去覆盖整个字符串即可。

#include
using namespace std;
const int N=1e3+10;
int t,n,m,id2[N],l2[N],id3[N],l3[N],l[N],r[N],id[N];
char s[N],c[N][N]; 
bool f[N];
inline void clear()
{
    for(int i=0;i<=m;++i) 
    {
        id2[i]=0;l2[i]=0;
        id3[i]=0;l3[i]=0;
        f[i]=0;
    }
    f[0]=true;
}
int main()
{
//    freopen("1.in","r",stdin);
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i) scanf("%s",c[i]+1);
        scanf("%s",s+1);
        clear();
        for(int i=1;i=1;--i) printf("%d %d %d\n",l[i],r[i],id[i]); 
    }
    return 0;
}

G. MinOr Tree

接下来看最后一题,这个题题意也很简单:求或起来的最小生成树。
记得之前做过在一堆数中找到两个数使得他们或起来最大或最小。和这个题方法一模一样...真的是记忆力....
首先位运算我们都是可以一位一位考虑的,然后从最高位考虑,看最高位能否为0,这个时候检查下,最高位为0的边,我们能否联通接口,接下来一位位的往下做即可。

#include
using namespace std;
const int N=2e5+10;
int T,n,m,f[N],vis[N];
struct bian{int x,y,v;}b[N]; 
inline int getf(int x){return f[x]==x?x:f[x]=getf(f[x]);}
inline bool check(int md)
{
    for(int i=1;i<=n;++i) f[i]=i;
    for(int i=1;i<=m;++i)
    {
        if(!vis[i]||((1<=0;--i)
        {
            if(check(i))
            {
                for(int j=1;j<=m;++j) if((1<

F. Interacdive Problem

f的交互题也不难,我们二分余数即可。