小 W 摆石子
【问题描述】
小 W 得到了一堆石子,要放在 N 条水平线与 M 条竖直线构成的网格的交点上。因为小 M 最喜欢矩形了,小 W 希望知道用 K 个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。
【输入格式】
第一行三个整数 N,M,K。
【输出格式】
一个非负整数,即最多的满足条件的长方形数量。
【输入输出样例】

rectangle.in
3 3 8
rectangle.out
5

rectangle.in
7 14 86
rectangle.out
1398

【数据规模】
对于 50%的数据:N<=30
对于 100%的数据:N<=30000,保证任意两点不重合,K<=N*M

题解

暴力枚举即可

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,m,k,sum,ans;
long long C(long long x){return x*(x-1)>>1;}
long long maxx(long long a,long long b){return a>b?a:b;}
long long work(long long x,long long y)
{
long long i,tans;
tans=0;
for(i=1;i<=y;i++)
if(k/i+(bool)(k%i)<=x)
tans=maxx(tans,C(k/i)*C(i)+C(k%i)*(k/i)); return tans;
} int main()
{
int i,j;
freopen("rectangle.in","r",stdin);
freopen("rectangle.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
ans=maxx(work(n,m),work(m,n));
printf("%lld",ans);
return 0;
}

小 M 玩数列
【问题描述】
众所周知,小 M 的数学超级超级好,于是给小 W 出了一道题:
给小 W 两个数 X,Y,其中 X ≤ Y≤ 2^31−1。
小 W 任务就是求出 Fibonacci 数列第 X~Y 项的和除以 10000 的余数。
然而小 W 是数学战五渣,于是只能把这个任务交给机智的你啦。
【输入格式】
第一行一个整数 T,表示数据组数。
接下来 T 行,每行两个数 X,Y,意义如题所述。
【输出格式】
T 行,每行是一个询问的答案。
【输入输出样例】

fibonacci.in
2
1 5

fibonacci.out
127 255

fibonacci.in
1
12

fibonacci.out
5976
【数据规模】
对于 80%的数据:T=1,Y<=10^6
对于 100%的数据:T<=1000,Y<=2^31-1

题解

矩乘优化即可

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#define mod 10000
using namespace std;
struct hh
{
int a[5][5],n,m;
};
hh a,b,c; int t,l,r,suma,sumb,ans;
int f[50005]; hh mul(hh,hh);
hh ff(hh,int);
int main()
{
int i,j;
freopen("fibonacci.in","r",stdin);
freopen("fibonacci.out","w",stdout);
scanf("%d",&t);
a.m=a.n=b.n=3;
b.m=1;
for(j=1;j<=3;j++) a.a[1][j]=1;
a.a[2][2]=a.a[2][3]=1;
a.a[3][2]=1;
b.a[1][1]=2;
b.a[2][1]=b.a[3][1]=1;
while(t--)
{
scanf("%d%d",&l,&r);
if(l<=3) suma=l-1;
else{c=mul(ff(a,l-3),b);suma=c.a[1][1];}
if(r<=2) sumb=r;
else{c=mul(ff(a,r-2),b);sumb=c.a[1][1];}
ans=(sumb-suma+mod)%mod;
printf("%d\n",ans);
}
fclose(stdin);
fclose(stdout);
return 0;
} hh mul(hh a,hh b)
{
int i,j,k;
hh c;
c.n=a.n;
c.m=b.m;
memset(c.a,0,sizeof(c.a));
for(i=1;i<=c.n;i++)
for(j=1;j<=c.m;j++)
for(k=1;k<=c.n;k++)
c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
return c;
} hh ff(hh a,int k)
{
int i,j;
hh c;
c.m=a.m;
c.n=a.n;
for(i=1;i<=min(c.n,c.m);i++) c.a[i][i]=1;
for(i=1;i<=c.n;i++)
for(j=1;j<=c.m;j++)
if(i!=j) c.a[i][j]=0;
while(k)
{
if(k&1) c=mul(a,c);
a=mul(a,a);
k>>=1;
}
return c;
}

小 W 计树
【问题描述】
小 W 千辛万苦做出了数列题,突然发现小 M 被困进了迷宫里。迷宫是一个有 N(2≤N≤1000)个顶点 M(N−1≤M≤N∗(N − 1)/2 ) 条边的无向连通图。设 dist1[i]表示在这个无向连通图中, 顶点 i 到顶点 1 的最短距离。为了解开迷宫,现在要求小 W 在这个图中删除 M − (N − 1)条边,使得这个迷宫变成一棵树。设 dist2[i]表示在这棵树中,顶点 i 到顶点 1 的距离。小 W 的任务是求出有多少种删除方案,使得对于任意的 i,满足 dist1[i]=dist2[i]。
快点帮助小 W 救出小 M 吧!
【输入格式】
第一行,两个整数, N, M,表示有 N 个顶点和 M 条边。
接下来有 M 行,每行有 3 个整数 x, y, len(1 ≤ x, y ≤ n, 1 ≤ len ≤ 100),表示顶点 x 和顶点 y 有一条长度为 len 的边。
数据保证不出现自环、重边。
【输出格式】
一行两个整数,表示满足条件的方案数 mod 2147483647 的答案。
【输入输出样例】
treecount.in
3 3
1 2 2
1 3 1
2 3 1

treecount.in
2
【样例解释】
删除第一条边或第三条边都能满足条件,所以方案数是 2。

【数据规模】
对于 30%的数据:2≤N≤5,M≤10
对于 50%的数据:满足条件的方案数不超过 10000
对于 100%的数据:2≤N≤1000

题解

首先考虑离 1 点最近的那个点,一定和 1 点只连着一条边,则这条边是必选的;然后考察第二近的点,一种可能是和 1 点直接连的边比较近,一种可能是经过刚才最近的那个点再到 1 点的路比较近,不管是哪一种,选择都是唯一的,而剩下第三种可能是两者距离相同,这样的话两者选且只能选一个。以此类推,假设现在已经构造好了前 k 个点的一棵子树,看剩余点中到 1 点最近的点,这个点到 1 点有 k 种方法(分别是和那 k 个点连边), 其中有 m 个是可以保持最短距离的,则这一步可选的边数就是 m。一直构造,把方法数累乘,就能得到最后的结果。整个过程可以很好的符合 dijkstra 的过程,而生成树的步骤和 prim 如出一辙。

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#define mod 2147483647
using namespace std; int n,m;
bool v[1005];
int we[1010][1010], dis[1010];
int last[1010];
int tot=0;
struct hh
{
int next,to,w;
}e[2000005]; long long ans=1;
struct node
{
int id,d;
};
node a[1005];
queue<int> q; bool cmp(node a, node b)
{
return a.d < b.d;
} void add(int a,int b,int c)
{
tot++;
e[tot].to=b;
e[tot].w=c;
we[a][b]=c;
e[tot].next=last[a];
last[a]=tot;
} void spfa()
{
int i,now;
for(i=2;i<=n;i++) dis[i]=9999999;
q.push(1);
dis[1]=0;
while(!q.empty())
{
now=q.front();
q.pop();
v[now]=false;
for(i=last[now];i;i=e[i].next)
if(dis[e[i].to]>dis[now]+e[i].w)
{
dis[e[i].to]=dis[now]+e[i].w;
if(!v[e[i].to])
{
v[e[i].to]=true;
q.push(e[i].to);
}
}
}
} int main()
{
int i,j,x,y,z,now;
freopen("treecount.in","r",stdin);
freopen("treecount.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
we[i][j]=9999999;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
spfa();
for (i=1;i<=n;i++)
{
a[i].id=i;
a[i].d=dis[i];
}
sort(a+1,a+n+1,cmp);
for(i=2;i<=n;i++)
{
now=0;
for(j=1;j<=i-1;j++)
if(a[i].d==a[j].d+we[a[i].id][a[j].id]) now++;
ans=ans*(long long)now%mod;
}
printf("%lld",ans);
fclose(stdin);
fclose(stdout);
return 0;
}

【2016常州一中夏令营Day3】的更多相关文章

  1. 【2016常州一中夏令营Day7】

    序列(sequence)[题目描述]蛤布斯有一个序列,初始为空.它依次将 1-n 插入序列,其中 i插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边).它希望你帮它求出最终序列.[输入数据 ...

  2. 【2016常州一中夏令营Day6】

    小 W 算树[问题描述]山有苞棣,隰有树檖.未见君子,忧心如醉~小 W 养了一棵有 N 个点的无根树,由于小 M 最喜欢二叉树了,为了讨小 M 欢喜,小 W想知道有多少个点作为根后,这棵树是一棵二叉树 ...

  3. 【2016常州一中夏令营Day5】

    小 W 拼图[问题描述]小 W 和小 M 一起玩拼图游戏啦~小 M 给小 M 一张 N 个点的图,有 M 条可选无向边,每条边有一个甜蜜值,小 W 要选K 条边,使得任意两点间最多有一条路径,并且选择 ...

  4. 【2016常州一中夏令营Day4】

    小 W 走迷宫[问题描述]小 W 被小 M 困在了一个方格矩阵迷宫里,矩阵边界在无穷远处,我们做出如下的假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上:b. 走过的格子立即塌陷无 ...

  5. 【2016常州一中夏令营Day2】

    小 W 学数学[问题描述]为了测试小 W 的数学水平,果果给了小 W N 个点,问他这 N 个点能构成的三角形个数.[输入格式]第一行一个整数 N,代表点数.接下来 N 行,每行两个非负整数 X.Y, ...

  6. 【2016常州一中夏令营Day1】

    Problem 1. suffix给定一个单词,如果该单词以 er. ly 或者 ing 后缀结尾,则删除该后缀(题目保证删除后缀后的单词长度不为 0),否则不进行任何操作.Input输入一行,包含一 ...

  7. 【FJ省队训练&&NOIP夏令营】酱油&&滚粗记

    FJOI2016省队训练滚粗记 2016.07.03~2016.07.06(Day1~5) 在学校期末考.因为才省选二试too young too simple爆蛋了所以下半个学期只能滚回去读文化课, ...

  8. 夏令营提高班上午上机测试 Day 2 解题报告

    那一天,日照一中夏令营数据结构提高班的同学们终于想起了,被Day2上午的三道题支配的恐惧……   是的..这一天的题有点难想.. 本来打算前天写这篇随笔,然而前天在机房和同学打luogu月赛…… 昨天 ...

  9. 百练6255-单词反转-2016正式B题

    百练 / 2016计算机学科夏令营上机考试 已经结束 题目 排名 状态 统计 提问   B:单词翻转 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个 ...

随机推荐

  1. 2019-11-1-asp-dotnet-core-简单开发P2P中央服务器

    title author date CreateTime categories asp dotnet core 简单开发P2P中央服务器 lindexi 2019-11-01 19:40:33 +08 ...

  2. 《C程序设计语言》笔记(一)

    一:导言 1:printf中的格式化字符串: %ld                    按照long整型打印 %6d                   按照十进制整数打印,至少6个字符宽,不够的 ...

  3. HZOJ Silhouette

    转化一下题意:给出矩阵每行每列的最大值,求满足条件的矩阵个数. 先将A,B按从大到小排序,显然没有什么影响.如果A的最大值不等于B的最大值那么无解否则一定有解. 考虑从大到小枚举A,B中出现的数s,那 ...

  4. poj 3225 【线段树】

    poj 3225 这题是用线段树解决区间问题,看了两天多,算是理解一点了. Description LogLoader, Inc. is a company specialized in provid ...

  5. Kubernetes弹性伸缩全场景解读(五) - 定时伸缩组件发布与开源

    前言 容器技术的发展让软件交付和运维变得更加标准化.轻量化.自动化.这使得动态调整负载的容量变成一件非常简单的事情.在kubernetes中,通常只需要修改对应的replicas数目即可完成.当负载的 ...

  6. 「BZOJ2510」弱题

    「BZOJ2510」弱题 这题的dp式子应该挺好写的,我是不会告诉你我开始写错了的,设f[i][j]为操作前i次,取到j小球的期望个数(第一维这么大显然不可做),那么 f[i][j]=f[i-1][j ...

  7. Xib设计UITableViewCell然后动态加载

    转自: http://www.2cto.com/kf/201202/120764.html (注:环境Mac OS X Lion 10.7.3 + Xcode 4.2.1 + iOS SDK 5.0. ...

  8. Top 10 Free IT Certification Training Resources

    1. Cybrary Cybrary takes the open source concept and applies it to IT training. Many of the courses ...

  9. 宝塔linux

    宝塔linux linux 定时任务管理

  10. autocomplete="off" inpu属性

    input 的属性autocomplete 默认为on 其含义代表是否让浏览器自动记录之前输入的值 很多时候,需要对客户的资料进行保密,防止浏览器软件或者恶意插件获取到 可以在input中加入auto ...