山东理工训练赛4
来源:互联网 发布:游戏挂机软件 编辑:程序博客网 时间:2024/04/30 17:35
A.题目描述
计算整数n!(n的阶乘)末尾有多少个0。
#include<stdio.h>int count0(int k){ int sum=0; while(k!=0) { k=k/5; sum+=k; } return sum;}int main(){ int n,i,j,x,k; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&x); j=count0(x); printf("%d\n",j); } return 0;}
连通网络
Time Limit: 1000MS Memory limit: 65536K
题目描述
网络由基站和基站间线路组成,基站连通表示两个基站可以通过线路互相到达。网络连通代表网络中任意两基站可以互相连通。现有一些网络,求这些网络至少增加多少线路成为连通网络。
输入
第一行输入一个数T代表测试数据个数(T<=20)。每个测试数据第一行2个数n,m 分别代表网络基站数和基站间线路数。基站的序号为从1到n。接下来m行两个数代表x,y 代表基站x,y间有一条线路。
(0<n<=1000000, 0<=m <=10000,1<=x,y<=n )
输出
对于每个样例输出最少增加多少线路可以成为连通网络。每行输出一个结果。
示例输入
23 11 23 21 22 3
示例输出
10
提示
简单dfs 胡乱搞搞
#include<iostream>#include<algorithm>#include<memory.h>#include<cstdio>#include<stack>using namespace std;const int maxn=1000002;const int maxm=100002;int dfn[maxn],low[maxn],n,m,indx,cnt,inStack[maxn],f[maxn][12];stack<int>s;void dfs(int u){ if(!dfn[u]) { dfn[u]=1; } for(int i=1;i<=f[u][0];i++) { int v=f[u][i]; if(!dfn[v]) { dfs(v); } }}int main(){ int i,j,k,a,b,t; cin>>t; while(t--) { scanf("%d%d",&n,&m); memset(dfn,0,sizeof(dfn)); memset(inStack,0,sizeof(inStack)); memset(low,0,sizeof(low)); memset(f,0,sizeof(f)); indx=0,cnt=0; for(i=1;i<=m;i++) { scanf("%d%d",&a,&b); f[a][++f[a][0]]=b; f[b][++f[b][0]]=a; } for(i=1;i<=n;i++) { if(!dfn[i]) { cnt++; dfs(i); } } cout<<cnt-1<<endl; } return 0;}
多项式求和
Time Limit: 1000MS Memory limit: 65536K
题目描述
多项式描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 ……
先请你求出多项式前n项的和。
输入
第一行输入一个数T代表测试数据个数(T<=1000)。接下来T行每行1个数代表n(0<=n< 2^31)。
输出
对于每个输入样例,输出多项式和的结果(结果精确到小数点后两位)。每行输出一个结果。
随便弄了弄。。。。。。。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>#include<cstdlib>using namespace std;int n,t;double a[10002],ans;int main(){ int i,j; cin>>t; while(t--) { cin>>n; ans=0.0; if(n>=10000) n=10000; for(i=(n)/2+1;i<=n;i++) { ans+=1.0/i; } printf("%.2f\n",ans); } return 0;}
飞行棋
Time Limit: 1000MS Memory limit: 65536K
题目描述
飞行棋是在一个长度为n的棋盘上走动棋子的游戏。游戏开始时有一个棋子在棋盘的开始,位置是1。然后每一步玩家掷一次骰子,并将棋子往前跳骰子正面大小个格子。
当棋子跳出飞行棋的棋盘时游戏结束。问游戏结束时玩游戏的人掷骰子次数的期望。
输入
第一行输入一个数T代表测试用例组数(T<=200),接下来T组测试用例,每组测试数据为棋盘大小。
输出
对于每个棋盘,输出玩家要掷骰子次数的期望(结果保留到小数点后4位)。每行输出一个结果。
示例输入
212
示例输出
1.00001.1667
提示 概率 求期望
简单概率DP。。。。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>#include<cstdlib>using namespace std;const int maxn=100001;double dp[maxn];int n,t,vis[maxn];int main(){ cin>>t; while(t--) { int i,j; cin>>n; for(i=0;i<=n+6;i++)dp[i]=0.0; for(int i=n-1;i>=0;i--) { for(int j=1;j<=6;j++) { if(i+j<=n) dp[i]+=(1.0/6)*dp[i+j]; else break; } dp[i]+=1.0; } printf("%.4lf\n",dp[0]); } return 0;}
矩形回旋
Time Limit: 1000MS Memory limit: 65536K
题目描述
有一个由 n*m(n是行数,m为列数) 的方格组成的矩形阵列。
现在从左上角开始顺时针旋转走动,遇到矩形边框或者遇到已经过的方格就转向继续,直到走完所有方格。求最后结束点的坐标(横坐标位置从1到m,纵坐标从1到n)。
输入
第一行输入一个数T代表测试数据个数(T<=20)。接下来T行每行两个正整数n,m ( 0 < n,m < 2^31)。
输出
对于每个输入n,m,输出最后的坐标(中间输出一个空格)。每行输出一个结果。
示例输入
13 3
示例输出
2 2
提示 找规律的东东
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>#include<cstdlib>using namespace std;int n,m,t;int main(){ cin>>t; while(t--) { int x,y; cin>>n>>m; if(n<=m) { x=n/2+1; if(n%2==1) { y=m-x+1; } else { y=n-x+1; } }else { y=(m+1)/2; if(m%2==1) { x=n-y+1; }else { x=m-y+1; } } cout<<x<<" "<<y<<endl; } return 0;}
- 山东理工训练赛4
- 山东理工月赛 D题
- 山东理工【2871】爱
- 山东理工ACM 2554
- 山东理工ACM:1196
- 山东理工ACM:1191
- 山东理工ACM:1174
- 山东理工ACM:1164
- 山东理工ACM:1172
- 山东理工ACM:1216
- 山东理工ACM:1168
- 山东理工ACM:1180
- 山东理工ACM:1334
- 山东理工ACM:2737
- 山东理工ACM:1154
- 山东理工ACM:1596
- 山东理工ACM:1238
- 山东理工ACM:1333
- [精华] 跟我一起写 Makefile
- Windows内核对象简介
- gcc命令objdump用法----反汇编
- 15周任务3:带姓名的成绩单
- 堆(heap)和栈(stack)的区别
- 山东理工训练赛4
- 鸟哥的linux私房菜
- 山东理工大学-2012秋季ACM集训队测试赛4-F-多项式求和
- 山东理工大学-2012秋季ACM集训队测试赛4-H-火星计数法
- http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2504&cid=1122
- 创建联动dashboard报表
- 好友分组的redis结构设计
- http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2502&cid=1122
- 山东理工大学-2012秋季ACM集训队测试赛4-I-矩形回旋