热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

长沙理工大学第十二届ACM大赛

A时间限制:1秒空间限制:131072K题目描述在云塘校区,有一个很适合晒太阳的地方————年轮广场年轮广场可以看成n个位置顺时
A 时间限制:1秒 空间限制:131072K

题目描述

在云塘校区,有一个很适合晒太阳的地方————年轮广场
年轮广场可以看成n个位置顺时针围成一个环。
这天,天气非常好,Mathon带着他的小伙伴们出来晒太阳。他们分别坐在A[i]位置上,每个位置上保证最多只有1个小伙伴。现在Mathon想让大家集合玩狼人杀,所以想选择一个位置集合,之后所有的人顺时针或逆时针移动到那里去,每移动两个相邻的位置需要1个单位时间,小伙伴们都很有素质所以不会插近路踩草坪,只会沿着位置走。
Mathon想越快集合越好,于是他在群里发了QQ消息告诉大家集合位置,假设所有人都立刻接到了消息,然后都以最优的方法往集合位置移动。
要把所有人集合到一个位置最少需要多少时间?

输入描述:

多组输入
每组数据第一行输入n,m(1<=n,m<=1000),n表示年轮广场上位置的个数,m表示Mathon以及他的小伙伴总人数
第二行m个数,第i个A[i](1<=A[i]<=n)表示第i个人的位置。

输出描述:

每组数据输出一行,表示所需要的最少时间。
示例1

输入

5 3
1 4 5
3 2
1 3

输出

1
1

说明

第一组数据选择5为集合地点,第二组数据选择2为集合地点。
 1 #include
2 using namespace std;
3
4 int a[1003];
5
6 int main(){
7 int n,m;
8 while(~scanf("%d%d",&n,&m)){
9 memset(a,0,sizeof(a));
10 int x;
11 for(int i=1;i<=m;i++) {
12 scanf("%d",&a[i]);
13 }
14 int Min=1e9+7,sum=0;
15 for(int i=1;i<=n;i++){
16 sum=0;
17 for(int j=1;j<=m;j++){
18 x=abs(a[j]-i);
19 sum=max(sum,min(x,n-x));
20 }
21 Min=min(Min,sum);
22 }
23 printf("%d\n",Min);
24 }
25 return 0;
26 }
B 日历中的数字
时间限制:1秒 空间限制:131072K

题目描述

ElemenT马上就要毕业了,他打开日历看了看时间。发现日历上的日期都是2017-04-04这样的格式的,月和日如果不足2位数,前面都会补充0。
给定一个年份和月份,ElemenT把那个月的日期都按上述格式写到纸上,他现在想知道某种数字出现了多少次。

输入描述:

多组输入
每组输入一行,有3个数字y,m,x(1000<=y<=3000,1<=m<=12,0<=x<=9),分别代表年份,月份,和他想知道哪个数字出现的次数。

输出描述:

每组输出一个整数,表示数字x在这个月的日期里出现了多少次。
示例1

输入

2017 4 4
2000 1 0

输出

33
我也不知道,2333

说明

第一组样例中,日中有数字4的为2017-04-04,2017-04-14,2017-04-24,4月一共有30天,因为月份中有4,所以数字4一共出现了30 + 3 = 33次
 1 #include
2 using namespace std;
3
4
5 int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
6 int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
7
8 int main(){
9 int y,m,d;
10 while(~scanf("%d%d%d",&y,&m,&d)){
11 int xx,yy;
12 int sum=0;
13 if(m==2){
14 if((y%4==0&&y%100!=0)||y%400==0){
15 xx=29;
16 }
17 else xx=28;
18 }
19 else xx=a[m];
20 for(int i=1;i<=xx;i++){
21 int x=i;
22 while(x){
23 yy=x%10;
24 if(yy==d) sum++;
25 x/=10;
26 }
27 }
28 int mm=m;
29 if(d==0) sum+=9;
30 if(d==0&&m<=9) sum+=xx;
31 while(m){
32 yy=m%10;
33 if(yy==d) sum+=xx;
34 m/=10;
35 }
36 while(y){
37 yy=y%10;
38 if(yy==d) sum+=xx;
39 y/=10;
40 }
41 printf("%d\n",sum);
42 }
43 }
C安卓图案解锁
时间限制:1秒 空间限制:131072K

题目描述

栗主席(lizi)是某xxxx大学的一个不得了的程序猿,然而没想到吧,他竟然有女盆友,我们假设为QAQ!!!
那天,QAQ问栗子:你的小米5s的图像解锁密码到底是多少?
栗子:嘛?我仔细想想...   
QAQ:你仿佛在逗我...
...
栗子:我的图像解锁用过好多次密码,后来都是用指纹解锁,所以忘记密码辣。但是我记得可能是那几个密码
QAQ:那你务必告诉我...
栗子: ...
 
然后,栗子就写下了一堆可能的密码,安卓图案解锁中,数字对应的位置已经标出。
但是栗子当然不想把真正的密码告诉QAQ,所以给QAQ的一系列的密码中,甚至有一些密码,是不符合安卓图案解锁的规则的。
QAQ也知道栗子肯定不老实,给了很多错的密码,甚至不符合规则的密码,所以想请你来找出,哪些密码是不符合规则的。
安卓图案解锁的密码有这样的一些特点:
1.每个数字最多只会被使用一次。
2.如果想直接连接两个数字,但是线段中会经过另一个数字,当且仅有那个数字已经在之前就被使用过了,才会合法。(比如你想从1直接连接到9,那么要么是1->3->9,要么是3在之前已经被使用过了,然后才能直接从1->9)

输入描述:

多组输入
每组输入占一行,包含一串数字(1~9),长度不超过30

输出描述:

输出这个安卓图案解锁是否合法,如果合法输出"YES",反之输出"NO" (请参照样例输出,不要输出引号)
示例1

输入

14569
1953
15963
15953

输出

YES
NO
YES
NO
 1 #include
2 using namespace std;
3
4 int a[10][10];
5
6 void init(){
7 a[1][3]=1;a[1][7]=1;
8 a[7][9]=1;a[3][9]=1;
9 a[1][9]=1;a[3][7]=1;
10 a[4][6]=1;a[2][8]=1;
11 }
12 int b[10];
13 int main(){
14 string s;
15
16 while(cin>>s){
17 memset(b,0,sizeof(b));
18 memset(a,0,sizeof(a));
19 init();
20 b[s[0]-'0']=1;
21 int tt=0;
22 for(int i=1;i){
23 if(b[s[i]-'0']) {
24 tt=1;break;
25 }
26 b[s[i]-'0']=1;
27 int x=s[i-1]-'0',y=s[i]-'0';
28 if(x>y) swap(x,y);
29 if(a[x][y]) {
30 tt=1;break;
31 }
32 if(x==4||y==4)
33 a[1][7]=0;
34 if(x==8||y==8)
35 a[7][9]=0;
36 if(x==6||y==6)
37 a[3][9]=0;
38 if(x==2||y==2)
39 a[1][3]=0;
40 if(x==5||y==5){
41 a[1][9]=0;
42 a[3][7]=0;
43 a[4][6]=0;
44 a[2][8]=0;
45 }
46 }
47 if(tt) printf("NO\n");
48 else printf("YES\n");
49 }
50 }

D 小M和天平

时间限制:2秒 空间限制:131072K

题目描述

小M想知道某件物品的重量,但是摆在他面前的只有一个天平(没有游标)和一堆石子,石子可以放左边也可以放右边。他现在知道每个石子的重量。问能不能根据上述条件,能不能测出所问的重量。

输入描述:

多组数据,第一行一个数N,表示石子个数。(1<=N<=100) 接下来第二行N个数,表示石子的重量。(1<=Wi<=100) 接下来第三行一个数M,表示询问个数。(1<=M<=1000) 接下来M行每行一个数k(1<=k<=1e9),表示一个询问。

输出描述:

对于每组数据,输出"YES"或者"NO"
示例1

输入

2
1 4
3
2
4
5

输出

NO
YES
YES
 1 #include
2 using namespace std;
3
4 int a[103];
5 int b[10004];
6 vector<int > c;
7
8 int main(){
9 int n;
10 while(~scanf("%d",&n)){
11 int x;
12 memset(b,0,sizeof(b));
13 c.clear();
14 c.push_back(0);
15 for(int i=1;i<=n;i++){
16 scanf("%d",&x);
17 int l=c.size();
18 for(int j=0;j){
19 int xx=x+c[j];
20 if(b[xx]==0){
21 c.push_back(xx);b[xx]=1;
22 }
23 xx=abs(x-c[j]);
24 if(b[xx]==0){
25 c.push_back(xx);b[xx]=1;
26 }
27 }
28 }
29 int m;
30 scanf("%d",&m);
31 while(m--){
32 scanf("%d",&x);
33 if(x<=10000&&b[x]) printf("YES\n");
34 else printf("NO\n");
35 }
36 }
37 }

I 主持人的烦恼

时间限制:1秒 空间限制:131072K

题目描述

一天zzq主持一项游戏,共n位同学,需要两两同学为一组来上台来玩一项游戏。
但是,众所周知,玩游戏的时候,如果两个人的颜值差距>=m,就会互相嫌弃。
所以,为了游戏能够好玩。在游戏开始前,zzq已经调查了所有n个同学的颜值。
但是现在问题又来了,zzq想知道,最多能凑出多少组同学一起上台?
需注意一人只能出现在一个组中。

输入描述:

多组输入
第一行两个正整数n m(n<=1e5,m<=1e9),意义见描述
第二行有n个由空格分开的正整数xi(xi<=1e9),第i个同学的颜值

输出描述:

每一行输出一个数,表示最多能凑出多少组。
示例1

输入

4 3
1 3 3 2
4 2
1 4 6 2

输出

2
1

说明

第二组样例中,编号为1的同学(颜值是1)与编号为4的同学(颜值是2),颜值差距为1,可以组成一组
 1 #include
2 using namespace std;
3
4 int a[100005];
5
6 int main(){
7 int n,m;
8 while(~scanf("%d%d",&n,&m)){
9 for(int i=1;i<=n;i++)
10 scanf("%d",&a[i]);
11 sort(a+1,a+1+n);
12 int sum=0;
13 for(int i=2;i<=n;i++){
14 if(a[i]-a[i-1];
15 }
16 printf("%d\n",sum);
17 }
18 }

J 武藏牛奶促销

时间限制:1秒 空间限制:131072K

题目描述

武藏牌牛奶为了吸引顾客,推出优惠活动,可以使用x个空的瓶身,**或者**y个瓶盖,去商店换一瓶全新的武藏牌牛奶。注意,一瓶牛奶包含了瓶身和瓶盖。
现在小萌老师有a个空的瓶身和b个瓶盖,她想喝到尽可能多的牛奶,你知道她到底能喝到多少瓶完整的牛奶吗?

输入描述:

多组输入
每组数据第一行包含4个正整数x y a b(1<=x,y,a,b<=100),意义见题目描述。

输出描述:

对于每组数据,输出一行,表示小萌老师最多能喝多少瓶完整的牛奶。如果能喝无数瓶,输出"INF"(不要输出引号)。
示例1

输入

1 3 1 1
4 3 6 4

输出

INF
4

说明

对于第二组测试样例,小萌老师有6个空的瓶身和4个瓶盖,她用4个瓶身和3个瓶盖换了2瓶牛奶并喝完,此时她就有4个空的瓶身和3个瓶盖。之后她再换2瓶牛奶并喝完,此时只有2个空的瓶身和2个瓶盖,就无法继续兑换了,所以答案是4
 1 #include
2 using namespace std;
3
4 int s[303][303];
5 int main(){
6 int x,y,a,b;
7 while(~scanf("%d%d%d%d",&x,&y,&a,&b)){
8 memset(s,0,sizeof(s));
9 if(x==1||y==1){
10 if(a>=1||b>=1) printf("INF\n");continue;
11 }
12 int sum=0;
13 s[a][b]=1;
14 int tt=0;
15
16 while(a>=x||b>=y){
17 while(a>=x) {
18 sum+=a/x;
19 b+=a/x;
20 a=a+a/x-(a/x)*x;
21 if(s[a][b]==1){
22 tt=1;break ;
23 }
24 s[a][b]=1;
25 }
26 while(b>=y) {
27 sum+=b/y;
28 a+=b/y;
29 b=b+b/y-(b/y)*y;
30 if(s[a][b]==1){
31 tt=1;break ;
32 }
33 s[a][b]=1;
34 }
35 if(tt) break;
36 }
37 if(!tt)
38 printf("%d\n",sum);
39 else printf("INF\n");
40 }
41 }
42 /*
43 2 2 100 100
44 */

 L 选择困难症

时间限制:3秒 空间限制:131072K

题目描述

小L有严重的选择困难症。
早上起床后,需要花很长时间决定今天穿什么出门。
假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度。
小L想知道,有多少种方案,使得选出来的总喜欢值>M
需要注意,每类物品,至多选择1件,可以不选。
 

输入描述:

多组输入
每组数据第一行输入k M(k<=6,1<=M<=1e8),表示有多少类物品
接下来k行,每行以Ai(1<=Ai<=100)开头,表示这类物品有多少个,接下来Ai个数,第j个为Vj(1<=Vj<=1e8),表示小L对这类物品的第j个的喜欢值是多少。

输出描述:

每组输出一行,表示方案数
示例1

输入

2 5
3 1 3 4
2 2 3
2 1
2 2 2
2 2 2

输出

3
8
 1 #include
2 using namespace std;
3 typedef long long ll;
4 const int N=1e6+40000;
5
6 int a[N],b[N];
7 int c[7][200];
8
9 int main(){
10 int n,m;
11 while(~scanf("%d%d",&n,&m)){
12 for(int i=1;i<=n;i++){
13 scanf("%d",&c[i][0]);
14 for(int j=1;j<=c[i][0];j++)
15 scanf("%d",&c[i][j]);
16 }
17 int l=0;
18 for(int i=1;i<=c[1][0];i++) a[++l]=c[1][i];
19 for(int i=2;i<=n/2;i++){
20 int ll=l;
21 for(int j=1;j<=c[i][0];j++){
22 a[++l]=c[i][j];
23 for(int k=1;k<=ll;k++)
24 a[++l]=c[i][j]+a[k];
25 }
26 }
27 int r=0;
28 for(int i=1;i<=c[n/2+1][0];i++) b[++r]=c[n/2+1][i];
29 for(int i=n/2+2;i<=n;i++){
30 int rr=r;
31 for(int j=1;j<=c[i][0];j++){
32 b[++r]=c[i][j];
33 for(int k=1;k<=rr;k++)
34 b[++r]=c[i][j]+b[k];
35 }
36 }
37 //for(int i=1;i<=l;i++) cout<38 // for(int i=1;i<=r;i++) cout<
39 sort(a+1,a+1+l);
40 ll sum=upper_bound(a+1,a+1+l,m)-a;
41 if(sum>l) sum=0;
42 else sum=l-sum+1;
43 for(int i=1;i<=r;i++){
44 int xx=m-b[i];
45 int k=upper_bound(a+1,a+1+l,xx)-a;
46 if(k<=l)
47 sum+=l-k+1;
48 if(b[i]>m) sum++;
49 }
50 cout<endl;
51 }
52 }

 


推荐阅读
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文介绍了最长上升子序列问题的一个变种解法,通过记录拐点的位置,将问题拆分为左右两个LIS问题。详细讲解了算法的实现过程,并给出了相应的代码。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
author-avatar
淘宝秀2010_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有