洛谷 NOIP 模拟 DAY2

来源:互联网 发布:淘宝我的空间怎么设置 编辑:程序博客网 时间:2024/05/23 12:45

T1 入阵曲

题目链接
n^4的做法很容易想到。
100分的做法一开始没想到;
我们枚举两行,然后求这两行之间的和时,记录下和的种类和数量,求到第j列的时候,前面有几列取模k得到的数与当前求得的一样时,那么这两列之间的和一定是k的倍数。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define LL long longusing namespace std;const int N=409;int a[N][N],s[N][N],b[N];int n,m,k;LL ans,cnt[1000009];int main(){    scanf("%d%d%d",&n,&m,&k);    for(int i=1;i<=n;i++)     for(int j=1;j<=m;j++){         scanf("%d",&a[i][j]);         s[i][j]=(s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a[i][j])%k;    }    for(int i=1;i<=n;i++)      for(int j=i;j<=n;j++){         for(int p=1;p<=m;p++) cnt[b[p]]=0,b[p]=0;         cnt[0]=1;         for(int p=1;p<=m;p++)         {            int x=((s[j][p]-s[i-1][p])%k+k)%k;            ans+=cnt[x];            cnt[x]++;            b[p]=x;         }    }    printf("%lld\n",ans);    return 0;}

T2 将军令

题目链接
先建一棵树;
然后最深的叶子结点往上翻k,一定要加小队;
所以建好树后,将距离当前最深的且没有被染色的叶子节点<=2*k的点都可以染上色。
染几轮即需放几个小队。
时间复杂度O(n*p)(p是个小的常数吧)

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define LL long longusing namespace std;const int N=1e5+77;int head[N],nxt[2*N],to[2*N],tot;int n,K,t,ans;bool vis[N];struct H{    int x,deep;}b[N];bool cmp(H p,H q){    return p.deep>q.deep;}void add(int x,int y){    to[++tot]=y;    nxt[tot]=head[x];    head[x]=tot;}void dfs(int x,int dep){    vis[x]=1;    b[x].deep=dep;    for(int i=head[x];i;i=nxt[i])       if(!vis[to[i]])           dfs(to[i],dep+1);}void DFS(int x,int dep,int father){    vis[x]=1;    if(dep==2*K) return;    for(int i=head[x];i;i=nxt[i])    if(to[i]!=father) DFS(to[i],dep+1,x); }int main(){    scanf("%d%d%d",&n,&K,&t);    for(int i=1;i<n;i++)    {        int x,y;        scanf("%d%d",&x,&y);        add(x,y);add(y,x);     }    dfs(1,0);    for(int i=1;i<=n;i++) b[i].x=i;    sort(b+1,b+n+1,cmp);    memset(vis,0,sizeof(vis));    for(int i=1;i<=n;i++)    {        if(!vis[b[i].x])        {            DFS(b[i].x,0,0);            ans++;        }     }    printf("%d",ans);    return 0;}
原创粉丝点击