表示这比赛坑好多……

题目页面

咳,总之在各种特殊的wa姿势之间摸爬滚打终于完成了这8道题……
题解时间到~


A 最小公倍数

求a1a_1,a2a_2,…,ana_n共n个数的最小公倍数。

关键:若x是a1a_1,a2a_2,…,an−1a_{n-1}的最小公倍数,则a1a_1,,a2,a_2,…,ana_n的最小公倍数为anxgcd(x,an)\frac{a_nx}{gcd(x,a_n)}(注意实际实现中先除后乘,否则有可能爆范围)。

#include <cstdio>using namespace std;typedef unsigned int u32;u32 gcd(u32 a,u32 b){return b?gcd(b,a%b):a;}int main(){int t,n;u32 tmp,ans;int i,j;scanf("%d",&t);for(i=0;i<t;i++){scanf("%d",&n);ans=1;for(j=0;j<n;j++){scanf("%u",&tmp);ans*=tmp/gcd(ans,tmp);}printf("%u\n",ans);}return 0;
}

B 进制转换

输入一个十进制整数n,输出它的r进制表示形式。

解法:连除取余,倒序输出。
原理:n=a0r0+a1r1+a2r2+...+anrnn=a_0r^0+a_1r^1+a_2r^2+...+a_nr^n
技巧:此题输入有多组数据,且题目未给出数据组数,开始我用feof(stdin)来判断是否已读到文件末尾,但貌似在win下不灵(渣渣ms还我罚时!)……最后在出题人主办方建议下改成了scanf(...)==EOF来判断……
注意:有负数,而且至少在我见过的代码中输入为0的情况都要特判。

#include <cstdio>typedef long long ll;char str[64];int main(){ll n;int r;int i;while(!feof(stdin)){scanf("%I64d%d",&n,&r);if(n==0)printf("0\n");else{if(n<0){putchar('-');n=-n;}for(i=0;n;i++){str[i]=n%r;n/=r;}for(i--;i>=0;i--)putchar((str[i]>9)?(str[i]-10+'A'):str[i]+'0');putchar('\n');}}return 0;
}

C 三角形

输入三个正数问能否以这三个数为三边长组成三角形。

知识:小学算术。

#include <cstdio>
#include <algorithm>using namespace std;double l[3];int main(){int m;int i,j;scanf("%d",&m);for(i=0;i<m;i++){for(j=0;j<3;j++)scanf("%lf",l+j);sort(l,l+3);printf((l[0]+l[1]>l[2])?"YES\n":"NO\n");}return 0;
}

D 空心三角形

输入一个三角形的高,在输出中绘制出这个三角形。

经验:一个高为hh的三角形底边长为2n−12n-1
(不是很复杂的实现题我一般不会出问题……)

#include <cstdio>using namespace std;char str[10];int main(){int n;bool b=false;char c;int i,j;while(true){scanf("%s",str);c=str[0];if(c=='@')break;if(b)putchar('\n');scanf("%d",&n);for(i=1;i<=n;i++){for(j=i;j<n;j++)putchar(' ');putchar(c);if(i==1){putchar('\n');}else if(i==n){for(j=2;j<n*2;j++)putchar(c);putchar('\n');}else{for(j=3;j<i*2;j++)putchar(' ');putchar(c);putchar('\n');}}b=true;}return 0;
}

E 整数解

输入两个整数n和m,问方程组

{x+y=nx×y=m

\begin{cases} \text x+y=n\\ \text x\times y=m \end{cases}
是否至少有一组整数解……

解法1:枚举x∈[−|m|,|m|]x\in[-|m|,|m|],则y=n−xy=n-x,判断xy=mxy=m是否成立即可。
解法2:

xy=m

xy=m

y=mx

y=\frac mx
代入 x+y=nx+y=n中得

x+mx=n

x+\frac mx=n

x2−nx+m=0

x^2-nx+m=0
然后利用一元二次方程求根公式即可。(正在码……)

注意:”Yes”和”No”!

#include <cstdio>
#include <cmath>using namespace std;int main(){int n,m;int absm;bool b;int i;while(true){scanf("%d%d",&n,&m);if((!n)&&(!m))return 0;b=false;absm=abs(m);for(i=-absm;i<=absm;i++){if(abs(n-i)>absm)continue;if(i*(n-i)==m){printf("Yes\n");b=true;break;}}if(!b)printf("No\n");}return 0;
}

F 考试排名

典型毒瘤手写ms word题……(出题人呢?出来出来……)

技巧:scanf()返回值为成功输入的数据个数(,然后你就知道括号怎么办了吧……)
注意:排序先按ac数降序,ac数相同再按时间分升序,都相同再按名字字典序升序……(大于小于别搞反)

吐槽:你妹滴题目明明没有说明最大学生数量,害我wa了四次!(出题人还我罚时!)

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;struct stu{int ac;double grade;char name[20];
};stu stus[1000];
char str[100];bool cmp(const stu& a,const stu& b){if(a.ac==b.ac)if(a.grade==b.grade)return strcmp(a.name,b.name)<0;else return a.grade<b.grade;else return a.ac>b.ac;
}void rp(char *s,int n){int len=strlen(s);int i;for(i=0;i<n-len;i++)putchar(' ');printf(s);
}int main(){int n,nstu;double m;double ta;int tb;int num,len;int tmp;int i,j;//freopen("d1t6.in","r",stdin);//freopen("d1t6.out","w",stdout);scanf("%d%lf",&n,&m);for(i=0;true;i++){if(scanf("%s",stus[i].name)==EOF)goto output;for(j=0;j<n;j++){num=scanf("%lf(%d)",&ta,&tb);//printf("%d %d %d\n",num,ta,tb);if(num==1){if(ta>0){stus[i].ac++;stus[i].grade+=ta;}}else{stus[i].ac++;stus[i].grade+=ta+tb*m;}}}output:nstu=i;sort(stus,stus+nstu,cmp);//printf("%d\n",nstu);for(i=0;i<nstu;i++){printf("%s",stus[i].name);len=strlen(stus[i].name);for(j=0;j<11-len;j++)putchar(' ');sprintf(str,"%d",stus[i].ac);rp(str,2);putchar(' ');if(floor(stus[i].grade)!=stus[i].grade)5/0;sprintf(str,"%d",tmp=stus[i].grade);rp(str,4);//putchar(' ');putchar('\n');}return 0;
}

G Olympiad

定义各位数字互不相同的数为美丽的数(美个头!),输入若干组a,ba,b,问[a,b][a,b]内美丽的数的个数……

解法:
定义an={0,1,n丑,n美, a_n= \begin{cases} \text{0,}&\text{n丑,}\\ \text{1,}&\text{n美,} \end{cases}
,则问题可转化为求{an}\{a_n\}的前n项和{Sn}\{S_n\},继而使用记忆前缀和的方法求解。

#include <cstdio>#define BMAX 100000bool mp[10];
int s[BMAX+1];bool isbeaut(int num){int i;for(i=0;i<10;i++)mp[i]=false;for(;num;num/=10)if(mp[num%10])return false;else mp[num%10]=true;return true;
}int main(){int t;int ta,tb;int i,j;for(i=1;i<=BMAX;i++)s[i]=s[i-1]+isbeaut(i);scanf("%d",&t);for(i=0;i<t;i++){scanf("%d%d",&ta,&tb);printf("%d\n",s[tb]-s[ta-1]);}return 0;
}

H 鸡兔同笼

现有若干只鸡与若干只兔关在同一笼中,输入鸡和兔脚的总数n,求笼中鸡和兔总只数的最小值和最大值。

思想:类似于贪心
解法:若求最小值,则令笼中兔的数量尽可能多(有可能剩余两只脚,为鸡脚);反之若求总只数最大值,则令笼中全为鸡即可。
注意:看清题!差点以为是小学奥数解方程题……

#include <cstdio>int main(){int a;int i;scanf("%d",&a);if(a%2)printf("0 0\n");else printf("%d %d\n",a/4+!!(a%4),a/2);return 0;
}

尾声

感受了一下acm的气氛,竞争还是很激烈的……切记就算所有题都会做也马虎不得……

CCNU ACM 2016夏季集训·day1比赛相关推荐

  1. CCNU ACM 2016夏季集训·day3比赛

    表示塔萌大学生智商好高,居然能搞出这么耗脑筋的题(详见C题)--先膜再发题解-- A 发工资咯:) 有面值为壹佰元.伍拾元.拾元.伍元.贰元.壹元的人民币,问付给他人xx元(xx为正整数)最少需多少纸 ...

  2. CCNU ACM 2016夏季集训·最长递增子序列(LIS)

    这几天dp写得难受-- 在讨论这个问题之前,首先明确:"子序列"是指从原序列中挑选出若干元素,按照原序列中的顺序组成新的序列(区别于"子串",即从原序列中挑选连 ...

  3. 中南大学计算机学院盛羽,中南大学、新疆大学ACM暑期联合集训营顺利开营

    本网讯 7月21日上午,中南大学.新疆大学ACM暑期联合集训营在校本部科技楼实验室顺利开营.由新疆大学软件学院副院长王新辉作为领队的15名新大师生与中南大学ACM集训队学生共同参加了开营仪式,计算机学 ...

  4. 2016年CCPC/ICPC比赛总结

    2016:我大一升入大二. 队友:GLY,WZK. 队名:开心就好(MyHappinessIsAll) 菜鸡战绩:5月省赛二等,9月东北四省赛二等,9月CCPC长春打铁,10月ICPC沈阳压线铜牌. ...

  5. 2016清华集训滚粗记

    DAY-1 白天还要去上学... 晚上吃了顿火锅就直接去火车站了... 都没有时间陪妹子看<你的名字>! 上火车之前好像知道了在绵阳发生的一些奇怪的事情... 在火车上和光老师周鹏还有jk ...

  6. 2016暑假集训小结

    小结 暑假集训之前,有很多事情在忙,什么考试,**之类.集训开始的时候还回了一趟家,这趟回家也发生了对我影响最大的事,之后想了很久,觉得也还是有必要继续走下去,因为我还是很爱这个集训队,很爱思考题解题 ...

  7. 2016暑假集训总结

    Preface 这是蒟蒻lyd729在初二升初三的暑假里训练的总结. 来看看一年前的lyd729写的暑假集训总结(链接),真是觉得自己长大了好多. 这一年发生了太多故事.(我来讲故事啦) 去年,一升初 ...

  8. 【AHOI 2016初中组】 自行车比赛 - 贪心

    题目描述 小雪非常关注自行车比赛,尤其是环滨湖自行车赛.一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军.今年一共有 N 位参赛选手.每一天的比赛总会决出当日的排名,第一名的 ...

  9. java比赛题目_【蓝桥杯2016第七届比赛题目】JAVA A组

    1 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤 ...

最新文章

  1. XMemcached使用示例--转
  2. bat脚本交互输入_测评 | 不使用powershell运行 PowerShell 脚本的工具汇总
  3. 64位系统使用Access 数据库文件的彻底解决方法
  4. 计算机2级c 语言题库,计算机2级C语言题库.doc
  5. 服务器性能优化的8种常用方法
  6. 35款非常有创意的透明名片设计作品
  7. 又拍云 php5月18号那,又拍云每月免费CDN空间和流量
  8. C++STL笔记(八):set和multiset详解
  9. Java数据类型分类
  10. 【VS插件】VS2012设置透明背景
  11. ubuntu显卡测试软件,Linux显卡性能测试程序Unigine Valley 和 Unigine Heaven
  12. 报表生成器FastReport .Net使用Windows.Forms教程
  13. vue jsx v html,Vue 中使用jsx示例
  14. 分数阶微积分学薛定宇电子版_分数阶微积分学与分数阶控制 pdf epub mobi txt 下载...
  15. 基于HTML、CSS、JavaScript、jQuery的app小项目--简易备忘录
  16. Java---SSM---Spring(1)
  17. 7月第1周回顾:AMD英特尔四核战在即 华为3Com遭收购传言
  18. 华硕天选2和华硕天选3哪个好 华硕天选2和华硕天选3区别
  19. intell IDE初始用
  20. 利用阿里大鱼发送短信验证

热门文章

  1. #读书笔记# 《人性的弱点》| 人际关系的基本技巧
  2. python 3.6 tensorflow_python3.6安装,以及安装tensorflow
  3. Nightcafe Creator:AI绘画艺术图片生成器
  4. 解决实例化Servlet类XXX异常
  5. 用友U8年度帐结转解析
  6. C++:保留小数点后几位
  7. 英特尔one API——AI为科技加速
  8. 基于微信小程序的音乐播放器系统+后台管理系统(SSM+mysql)-JAVA.VUE【毕业设计、论文、源码、开题报告】
  9. 【IOS】最简单方式实现跑马灯文字效果
  10. Vue实现日期选择器