热门标签 | 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 }

 


推荐阅读
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 题目描述:给定一个N*M的网格,初始时网格中有k个芯片,每个芯片的位置已知。玩家可以在每一步操作中将所有芯片沿同一方向移动一格。如果芯片到达边界,则保持不动。目标是通过一系列操作,使每个芯片依次访问指定的目标位置。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • 本文介绍两道有趣的编程问题:一是寻找给定数字n的连续数字序列及其个数,二是模拟一个翻杯子的游戏。同时附带一道智商题供读者思考。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 在进行QT交叉编译时,可能会遇到与目标架构不匹配的宏定义问题。例如,当为ARM或MIPS架构编译时,需要确保使用正确的宏(如QT_ARCH_ARM或QT_ARCH_MIPS),而不是默认的QT_ARCH_I386。本文将详细介绍如何正确配置编译环境以避免此类错误。 ... [详细]
  • Qt QTableView 内嵌控件的实现方法
    本文详细介绍了在 Qt QTableView 中嵌入控件的多种方法,包括使用 QItemDelegate、setIndexWidget 和 setIndexWidget 结合布局管理器。每种方法都有其适用场景和优缺点。 ... [详细]
  • 本题要求实现一个函数,用于检查给定的字符串是否为回文。回文是指正向和反向读取都相同的字符串。例如,“XYZYX”和“xyzzyx”都是回文。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
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社区 版权所有