NOIP模拟赛16

Posted 日拱一卒 功不唐捐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP模拟赛16相关的知识,希望对你有一定的参考价值。

NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2

期望得分:100+100+ =200+

实际得分:100+40+70=210

 

T1天天寄快递

直接模拟,代码丢了。。。。。。

 

T2天天和不可描述

splay可A

正解dfs+list

技术分享
#include<iostream>
#include<list>
#include<cstdio>
using namespace std;
list<char>s;
char c;
void getstr(bool rev,list<char>&tmp)
{
    tmp.clear();
    while(true)
    {
        c=cin.get();
        if(c==)) break;
        else if(c==()
        {
            list<char>tmp2;
            getstr(!rev,tmp2);
            if(rev) s.splice(tmp.begin(),tmp2);
            else s.splice(tmp.end(),tmp2);
        }
        else if(rev) tmp.push_front(c);
        else tmp.push_back(c);
    }
}
int main()
{
    while(1)
    {
        c=cin.get();
        if(c==EOF) break;
        else if(c==()
        {
            list<char>tmp;
            getstr(true,tmp);
            s.splice(s.end(),tmp);
        }
        else s.push_back(c);
    }
    for(list<char>::iterator iter=s.begin();iter!=s.end();iter++) cout<<*iter;
    return 0;
}
View Code

 

T3 罪犯分组

状压DP

技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool map[20][20];
int f[1<<16|1];
int main()
{
    int n,m,k,u,v;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=m;i++) scanf("%d%d",&u,&v),u--,v--,map[u][v]=map[v][u]=true;
    memset(f,63,sizeof(f));
    int S=1<<n;
    f[0]=0;
    int sum;
    for(int i=1;i<S;i++)
    {
        sum=0;
        for(int j=0;j<n;j++)
            for(int k=j+1;k<n;k++)
                if((1<<k)&i && (1<<j)&i && map[j][k]) sum++;
        if(sum<=k) f[i]=1;
        for(int j=i;j;j=(j-1)&i) f[i]=min(f[i],f[j]+f[j^i]);
    }
    printf("%d",f[S-1]);
}
View Code

 

以上是关于NOIP模拟赛16的主要内容,如果未能解决你的问题,请参考以下文章

2014-5-16 NOIP模拟赛

2017.07.16【NOIP提高组】模拟赛B组 卫星照片 题解

9.16noip模拟试题

NOIP模拟 17.8.16

NOIP模拟赛收银员(一道好的查分约束题)

洛谷CON1041 NOIP模拟赛一试