计算机学院2014年“新生杯”ACM程序设计大赛
1440: 棋盘摆车问题
对于输入n,k;
1.当n<k时,无满足的摆法
2.否则
第一个车可以排n*n个位置(即整个棋盘),第二个可排(n-1)*(n-1)个位置,……
正如排列组合一样,车与车之间没有区别(这是组合问题),于是要除以k!
#include<stdio.h>
long long A(int x)
{
long long num=1;
for(int i=2;i<=x;i++)
{
num*=i;
}
return num;
}
int main()
{
int n,k;
long long ans;
while(scanf("%d %d",&n,&k)!=EOF)
{
ans=1;
if(n<k)
{
printf("0\n");
continue;
}
for(int i=n,j=1; j<=k; i--,j++)
{
ans*=i*i;
}
ans/=A(k);
printf("%lld\n",ans);
}
return 0;
}
1441: N!
提示很明显m=N!
log10(m)=log10(N)*log10(N-1)……log10(2)
#include<stdio.h>
#include<math.h>
int main()
{
int n;
double ans;
int Case=0;
while(scanf("%d",&n)!=EOF)
{
ans=0;
if(n>=1)
{
for(int i=2;i<=n;i++)
ans+=log10(i);
}
ans+=1;
int ans1=(int)ans;
printf("Case %dth is : %d.\n",++Case,ans1);
//printf("Case %dth is : %d %f %.0f.\n",++Case,ans1,ans,ans);试一试用这行输出,或许会发现错的缘由
}
return 0;
}
1442: 决胜千里之外
Nim博弈问题
博弈基本原理:
先手必胜当且仅当:
    (1)所有堆的石子数都为 1 且游戏的 SG 值为 0;
    (2)有些堆的石子数大于 1 且游戏的 SG 值不为 0。
http://www.cnblogs.com/XDJjy/p/3352161.html
#include<stdio.h>
int
main()
{
int n,m;
while(scanf("%d
%d",&n,&m)!=EOF)
{
if(n%(m+1))printf("胡爷真男人\n");
else printf("雷神真男人\n");
}
return 0;
}
1443: 无限的路
我的思路:
分析图形特点,线段被分为两类,一类的单位长度为
另一类为
1.对于输入的两个点,先转换到y坐标轴上,
这样方便计算第二类距离
2.然后计算第一类的线段长度,
#include<stdio.h>
#include<math.h>
double
line[210];
void
Line()
{
for(int i=1;i<210;i++)
line[i]=sqrt((double)i*i+(i-1)*(i-1));
}
int
main()
{
int n;
scanf("%d",&n);
int x1,y1,x2,y2;
Line();
while(n--)
{
scanf("%d %d %d
%d",&x1,&y1,&x2,&y2);
int sum1=x1+y1;
int sum2=x2+y2;
int sum,x;
if(sum1>sum2)
{
sum=sum1;
sum1=sum2;
sum2=sum;//sum2为较大者
x=x1;
x1=x2;
x2=x;
}
double ans=0;
for(int i=sum1+1; i<=sum2; i++)
{
ans+=line[i];
}
//printf("&%lf %d
%d\n",ans,sum1,sum2);
ans-=sqrt(2.0)*x1;
ans+=sqrt(2.0)*x2;
for(int i=sum1; i<sum2; i++)
ans+=sqrt(2.0)*i;
printf("%.3lf\n",ans);
}
return 0;
}
1444: 判断素数
基本的判断素数的方法如本程序
还有更多时间更优的算法。
#include<stdio.h>
#include<math.h>
int
Judge(int m)
{
for(int i=2; i<=sqrt(m)+0.5; i++)//若写成I<m,则会超时
{
if(m%i==0)return 0;
}
return 1;
}
int
main()
{
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
if(Judge(m))printf("Yes\n");
else printf("No\n");
}
return 0;
}
1448: 等式
本题是一道杂题,也是防AK(all killed即全部被解决)的题目,
将n移到右边得等式:x^2+s(x,m)x=n
发现左边两项均为正数,得到x<
,
只需向前尝试(
-1000,
)区间的解。(无完整证明)
#include<stdio.h>
#include<math.h>
int
S(int x,int m)
{
int num=0;;
while(x>0)
{
num+=x%m;
x/=m;
}
return num;
}
int
main()
{
int Case;
long long n;
int m;
scanf("%d",&Case);
while(Case--)
{
scanf("%lld
%d",&n,&m);
int st=sqrt(n);
int count=1;
int ans=-1;
for(int i=st;
i>0&&count<1000; i--,count++)
{
if((long long)i*i+(long
long)S(i,m)*i==n)ans=i;
}
printf("%d\n",ans);
}
}
1452: 青蛙的故事
递推公式的推导
假设青蛙在k(k>2)阶上
则青蛙必定是从k-1阶跳一步上来
或是从k-2阶跳两步上来
得递推公式f[k] = f[k-1]+f[k-2]
f[1]=1;
f[2]=2;
代码1:(超时)
#include<stdio.h>
int
Func(int m)
{
if(m==1)return 1;
else if(m==2)return 2;
else return Func(m-2)+Func(m-1);}
int
main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",Func(n));
}
return 0;
}
代码2;
#include<stdio.h>
int
f[50];
int
Init()
{
f[1]=1;
f[2]=2;
for(int i=3;i<40;i++)
{
f[i]=f[i-1]+f[i-2];
}
}
int
main()
{
int n;
Init();
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",f[n]);
}
return 0;
}
1453: 数字游戏
没有设严格的时间限制,
只需先找到k在哪一行
然后确定k是本行的第几个
#include<stdio.h>
#include<string.h>
int
main()
{
int _case;
int n,m;
long long k;
//scanf("%d",&_case);_case--
while(scanf("%d %d
%lld",&n,&m,&k)!=EOF)
{
int t;
long long sum=0;
//k=p;
for(t=n;t>=0;t-=m)
{
sum+=t;
if(k-sum<=0)break;
}
//printf("%d %d\n",sum,t);
if(t>=0)printf("%lld\n",n-(sum-k));
else printf("0\n");
}
return 0;
}
1454: 偶数拆分
代码1也不会超时,即大多数的题目并没有严格卡时间
只要思路对,代码敲对即可
代码1:
#include<stdio.h>
#include<math.h>
#include<string.h>
const
int Max=10010;
int
prime[Max];
//int
counter=0;
int
Judge(int x)
{
for(int i=2; i<=sqrt(x)+0.5; i++)
{
if(x%i==0)return 0;
}
return 1;
}
int
main()
{
//Pri();
//for(int i=0;i<10010;i++)
//if(prime[i])printf("%d
",i);
int n,ans;
while(scanf("%d",&n)!=EOF)
{
if(!n)break;
ans=0;
for(int i=2;i<n/2;i++)
{
if(Judge(i)&&Judge(n-i))
{
//printf("%d
%d\n",i,n-i);
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
代码2:
#include<stdio.h>
#include<math.h>
#include<string.h>
const
int Max=10010;
int
prime[Max];
//int
counter=0;
int
Pri()
{
memset(prime,0,sizeof(prime));
for(int i=2; i<Max; i++)
{
int flag=1;
for(int j=2;j<=sqrt(i)+0.5;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)prime[i]=1;
}
}
int
main()
{
Pri();
//for(int i=0;i<10010;i++)
//if(prime[i])printf("%d
",i);
int n,ans;
while(scanf("%d",&n)!=EOF)
{
if(!n)break;
ans=0;
for(int i=2;i<n/2;i++)
{
if(prime[i]&&prime[n-i])
{
//printf("%d
%d\n",i,n-i);
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}
小结:
本次比赛完满结束,先感谢一下出题者。虽然这些题是他们眼里的水题,但是出题者也是煞费苦心,正如以前的学长一样。然后是尽职尽责的团学年工作者,当然也不能忘了默默支持大家的领导老师。
希望大家
阅读,思考,分享,K题。编程优化人生!
Xdj
计算机学院2014年“新生杯”ACM程序设计大赛的更多相关文章
- Contest - 第10届“新秀杯”ACM程序设计大赛现场热身赛 赛后信息(题解)
		
Problem Id Title Problem A A+B Problem B 统计字数 Problem C 生日计算 Problem D 冬瓜的寒假之旅 Problem A(略 ...
 - Contest - 第10届“新秀杯”ACM程序设计大赛网络资格赛 赛后信息(晋级名单·正式版)
		
2014_acm_fresh_0057 刘畅 20131620 2014_acm_fresh_0099 汪哲 20132185 2014_acm_fresh_0086 陈顺 2014111776 20 ...
 - Contest - 第10届“新秀杯”ACM程序设计大赛网络预选赛 赛后信息(晋级名单)
		
经过比赛结果以及综合评定,以下42名同学暂定出现.下为出现名单(打*为 友情参赛 或为 有重大作弊嫌疑的选手). 在即日24时之前,若有异议,仍可申诉,申诉邮箱:desgard_duan@foxmai ...
 - 第十一届GPCT杯大学生程序设计大赛完美闭幕
		
刚刚过去的周六(6月7号)是今年高考的第一天,同一时候也是GPCT杯大学生程序设计大赛颁奖的日子,以下我们用图文再回想一下本次大赛颁奖的过程. 评审过程的一些花絮<感谢各位评审这些天的付出!&g ...
 - 西南科技大学第十一届ACM程序设计大赛发言稿
		
西南科技大学第十一届ACM程序设计大赛发言稿 各位老师.志愿者及参赛选手: 大家好,我是来自计科学院卓软1301的哈特13,很荣幸今天能站在这里代表参赛选手发言. 回想起来,我参加ACM比赛已经快两年 ...
 - 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏
		
第13届 广东工业大学ACM程序设计大赛 C题 平分游戏 题目描述 转眼间又过了一年,又有一届的师兄师姐要毕业了.  有些师兄师姐就去了景驰科技实习. 在景驰,员工是他们最宝贵的财富.只有把每一个人 ...
 - nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)
		
题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...
 - nyoj 1239 引水project (河南省第八届acm程序设计大赛)
		
题目1239 pid=1239" style="color:rgb(55,119,188)">题目信息 pid=1239" style="col ...
 - nyoj1237 最大岛屿(河南省第八届acm程序设计大赛)
		
题目1237 pid=1237" style="color:rgb(55,119,188)">题目信息 执行结果 本题排行 讨论区 最大岛屿 时间限制:1000 m ...
 
随机推荐
- ExtJS4.x 开发环境搭建
			
需要的资源 ExtJS4.2 eclipse 开发环境搭建 在项目中国需要引用的文件: eclipse中有报错.需要处理的是ext-lang-zh_CN.js,中文编码不能识别.右键->属性-& ...
 - 将inline、template声明和定义在头文件中
			
如果要在要在源文件(a.cpp)中内联的展开一个函数(fun),则该源文件(a.cpp)中必须包含此函数(fun)的定义.如果要在多个文件中内联的展开fun,则在所有的源文件中都必须包含fun的定义. ...
 - 对C++中高内聚,低耦合原则的理解
			
1.C语言是面向过程的语言,采用模块化的设计思想,每个功能划分为一个模块,是以函数为单位的. 2.C++是面向对象的语言,采用类设计的思想,因此C++中的模块是以类为基本单位的. 高内聚,低耦合能够使 ...
 - JPA学习---第九节:JPA中的一对多双向关联与级联操作
			
一.一对多双向关联与级联操作 1.创建项目,配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> < ...
 - Linux 前台 和 后台进程 说明
			
一. 有关进程的几种常用方法 1.1 & 符号 在命令后面加上一个 & 符号,表示该命令放在后台执行,如: [oracle@singledb ~]$ crontab -l 20 17 ...
 - OGNL表达式介绍
			
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存 ...
 - linux设备驱动第五篇:驱动中的并发与竟态
			
综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争. 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时.并行被 ...
 - string::rfind
			
该函数返回目标字符串(key)在源字符串中最后一次匹配的位置 如果没有找到匹配的位置则返回string::npos,是一个无符号整形数字,可以打印看看 //// string::rfind #incl ...
 - hibernate--OneToOne
			
一对一(one to one) 单向关联映射 两个对象是一对一的的关系. 有两种策略可以实现一对一的关联映射 l 主键关联:即让两个对象具有相同的主键值,以表明他们之间的一对一的对应关系;数据库表不 ...
 - bzoj 3295 树套树
			
比较裸,可以有好多的优化,比如根本没有删除的点没有加在树套树中的必要,预处理 出来每个不会被删除的值可以减少不少时间,也可以写成树状数组套平衡树,都会快很多 /******************** ...