河南理工大学第六届程序设计大赛

问题 A: 感恩节KK专场——送给新生的礼物

时间限制: 1 Sec  内存限制: 128 MB 提交: 633  解决: 189 [提交][状态][讨论版]

题目描述

学长KK要送给学弟学妹们礼物,他送给学弟每人一个礼物,送给学妹每人两个礼物。为什么?KK单身好多年了。 现在KK想知道他需要准备的礼物数目。注意:如果没有学妹,KK会十分伤心,就不会给任何人发礼物。

输入

给定一个整数t,表示有t(t<=30)组测试数据。每组测试数据有两个整数b(0<=b<=100)和g(0<=g<=100),表示学弟的人数和学妹的人数。

输出

每行输出一个整数,表示需要准备的礼物数。

样例输入

2 1 2 2 3

样例输出

5 8

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);

int main(){
	int T,b,g;
	SI(T);
	T_T{
		SI(b);SI(g);
		if(g==0){
			puts("0");continue;
		}
		PI(b+g*2);puts("");
	}
	return 0;
}

  

问题 B: 感恩节KK专场——特殊的比赛日期

时间限制: 1 Sec  内存限制: 128 MB 提交: 393  解决: 100 [提交][状态][讨论版]

题目描述

KK今天参加河南理工大学ACM程序设计竞赛,他发现今天是11月29号,刚好11和29都是素数(只能被1和自己本身整除的数叫做素数),于是他想知道今年(2015年)的某天之前(不含当天)一共有多少天是月份和天数都是素数。

输入

第一行输入一个整数t(1<t<366),代表t组测试数据。

接下来每行输入一个日期,仅包含(月份和天数),格式形如(yy-dd)。

输入时保证日期全部属于合法日期。

输出

输入yy-dd天之前有多少天的日期同时满足yy和dd同时为素数。

样例输入

3 2-2 2-5 2-15

样例输出

0 2 6

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
int dp[13][32];
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool prime(int x){
	if(x==0||x==1)return false;
	if(x==2)return true;
	for(int i=2;i<x;i++){
		if(x%i==0)return false;
	}
	return true;
}
int main(){
	int T,yy,dd;
	mem(dp,0);
	for(int i=2;i<=12;i++){
		dp[i][1]=dp[i-1][mon[i-1]];
		if(prime(i)){
			for(int j=2;j<=mon[i];j++){
				dp[i][j]=dp[i][j-1];
				if(prime(j))dp[i][j]++;
			//	printf("%d ",dp[i][j]);
			}
		}
		else {
			int temp=dp[i-1][mon[i-1]];
			for(int j=2;j<=mon[i];j++){
				dp[i][j]=temp;
			}
		}
	}
	scanf("%d",&T);
	T_T{
		scanf("%d-%d",&yy,&dd);
		if(prime(yy)&&prime(dd))printf("%d\n",dp[yy][dd]-1);
		else printf("%d\n",dp[yy][dd]);
	}
	return 0;
}

  

问题 C: 感恩节KK专场——考试来了

时间限制: 1 Sec  内存限制: 128 MB 提交: 479  解决: 115 [提交][状态][讨论版]

题目描述

很多课程马上就结课了,随之而来的就是可怕的考试啦。现在KK学长即将迎来n场考试,为了不挂科,他必须复习完这n门课程。但是KK学长比较贪玩,一天只会花费a时间和b精力去复习。已知距离考试还有d天,问KK学长能不能复习完所有的功课。

输入

给定一个整数t,表示有t(t<=50)组测试数据。每组测试数据第一行有一个整数n(1<=n<=100),表示课程数目。 接下来一行有三个整数a,b,d(0<=a,b,d<=1000),代表上面提到的信息。下面有n行,每行有两个整数T[i],E[i](0<=T[i],E[i]<=1000),表示KK学长复习第i门课程,需要花费时间T[i],消耗精力E[i]。

输出

若KK学长可以复习完所有的课程,输出YES,否则输出NO。输出占一行。

样例输入

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

样例输出

YES

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);

int main(){
	int T,a,b,d,n,t,e,st,se;
	SI(T);
	T_T{
		SI(n);
		scanf("%d%d%d",&a,&b,&d);
		st=0;se=0;int i;
		for(i=0;i<n;i++){
			SI(t);SI(e);
			st+=t;se+=e;
		}
		if(a*d>=st&&b*d>=se)puts("YES");
		else puts("NO");
	}
	return 0;
}

  

问题 D: 感恩节KK专场——2015年的第一场雪

时间限制: 1 Sec  内存限制: 128 MB 提交: 873  解决: 77 [提交][状态][讨论版]

题目描述

下雪了,KK学长站在三教门口,看学弟学妹们堆雪人。突然KK学长发现一个神奇的规律:春秋大道上能被k整除的位置都会有一个雪人。现在KK学长想知道春秋大道的[x, y]区间里面有多少个雪人。

输入

给定一个整数t,表示有t(t<=6000)组测试数据。每组测试数据有三个整数k(k非0且|k|<=2^30),x,y(x<=y且|x|,|y|<=2^30)。

输出

每行输出一个整数,表示雪人的个数。

样例输入

1 1 1 2

样例输出

2

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
int main(){
	int k,x,y,T;
	LL ans;
	SI(T);
	T_T{
		scanf("%d%d%d",&k,&x,&y);
		int p=x/k;
	//	printf("%d %d\n",x,y);
	while(p*k<x)p++;
	ans=0;
		while(p*k<=y)ans++,p++;
		printf("%lld\n",ans);
	}
	return 0;
}

  

问题 E: 感恩节KK专场——爬楼梯

时间限制: 1 Sec  内存限制: 1000 MB 提交: 385  解决: 91 [提交][状态][讨论版]

题目描述

来机房比赛的时候大家都会爬楼梯,但是每个人可以迈出的最大步子不一样,所以到达机房的方案数也会不同。现在KK提出一个问题:目的地在第n层楼梯,我们在第1层,已知我们每次最多可以迈出3个台阶。问有多少种方案可以到达目的地。

输入

给定一个整数t,表示有t组测试数据(t>=10000)。每组测试数据有一个整数n(1<=n<=30),代表有n阶楼梯。

输出

每行输出一个整数,表示方案数。

样例输入

3 1 2 3

样例输出

0 1 2

注意dp[4]=1+2+1;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
LL dp[40];
int main(){
	mem(dp,0);
	int T;
	dp[1]=0;dp[2]=1;dp[3]=2;dp[4]=4;
	for(int i=5;i<=30;i++)dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
	int n;
	SI(T);
	T_T{
		SI(n);
		printf("%lld\n",dp[n]);
	}
	return 0;
}

 

问题 F: 感恩节KK专场——面试难题

时间限制: 1 Sec  内存限制: 128 MB 提交: 297  解决: 40 [提交][状态][讨论版]

题目描述

有n个人要来面试学生会XX部门,要求面试过程中任意两个面试者之间的时间不能有重叠。已知n个面试者到来的时间和需要面试的时间,问最多可以面试多少个人。该部门的XX是KK的好友,现在他来找KK帮忙。但是KK很忙,请你帮帮KK吧。 时间重叠如[1, 3] [2, 4]或者[1, 3][3, 4]。

输入

给定一个整数t,表示有t(t<=100)组测试数据。每组测试数据有一个整数n(0<=n<=1000),接下来每行有两个整数S[i],T[i],表示第i个面试到来的时间和需要面试的时间。

输出

每行输出一个整数,表示最多可以面试的人数。

样例输入

1 1 1 0

样例输出

1

 题解:贪心

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
struct Node{
	int s,l;
}dt[1010];
int cmp(Node a,Node b){
	if(a.s+a.l!=b.s+b.l)return a.s+a.l<b.s+b.l;
	else return a.s<b.s;
}
int main(){
	int T,n;
	SI(T);
	T_T{
		SI(n);
		if(n==0){
			puts("0");continue;
		}
		for(int i=0;i<n;i++){
			Node a;
			scanf("%d%d",&a.s,&a.l);
			dt[i]=a;
		}
		sort(dt,dt+n,cmp);
		int ans=1,cur=dt[0].s+dt[0].l;
		for(int i=1;i<n;i++){
			if(cur<dt[i].s){
				ans++;
				cur=dt[i].s+dt[i].l;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}

  

问题 G: 感恩节KK专场——与学妹滑雪

时间限制: 1 Sec  内存限制: 128 MB 提交: 301  解决: 26 [提交][状态][讨论版]

题目描述

这周下的雪好大好大,不过这正和KK学长之意。因为他要去陪学妹滑雪,谁知调皮的学妹要和KK比赛,无奈的KK只能应战。已知比赛场地有n个站点,m条路线。比赛起点是第一个站点,终点是第n个站点,先到达终点的人是胜者(如果KK和学妹同时到,KK会认输)。现在KK为了显示学长风范,决定让学妹先滑T秒。但是到了比赛的时候,KK就有点后悔了。已知学妹到达终点需要时间Tg秒,KK每秒可以滑k米。现在问你KK在最优情况下能否赢得比赛。

输入

给定一个整数t,表示有t(t<=20)组测试数据。每组测试数据有两个整数n(1<=n<=1000),m(1<=m<=10000),接下来m行表示路线,每行三个整数a,b,c分别表示路线起点,终点,长度。最后一行有两个个整数T(1<=T<=10),Tg(1<=Tg<=10000)和一个实数k(0<=k<=200)表示上面提到的信息。

输出

若KK可以获胜输出"Good job,KK!",否则输出"What a pity!"。输出占一行。

样例输入

1 2 1 1 2 3 1 1 1

样例输出

What a pity!

最短路,注意精度;

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int MAXN=1010;
const int INF=0x3f3f3f3f;
int mp[MAXN][MAXN];
int vis[MAXN],dis[MAXN];
int n,m;
void dij(int u){
	mem(vis,0);mem(dis,INF);
	dis[u]=0;
	while(true){
		int k=-1,temp=INF;
		for(int i=1;i<=n;i++)
			if(!vis[i]&&(k==-1||dis[i]<dis[k]))k=i;
		if(k==-1)break;
		vis[k]=1;
		for(int i=1;i<=n;i++)
			if(!vis[i]&&dis[i]>dis[k]+mp[k][i])dis[i]=dis[k]+mp[k][i];
	}
}
int main(){
	int T,a,b,c,st,tg;
	double k;
	SI(T);
	T_T{
		mem(mp,INF);
		scanf("%d%d",&n,&m);
		while(m--){
			scanf("%d%d%d",&a,&b,&c);
			if(mp[a][b]>c)mp[a][b]=mp[b][a]=c;

		}
		dij(1);
		scanf("%d%d%lf",&st,&tg,&k);
			//	printf("%d\n",dis[n]);
		if(1.0*tg-(st+1.0*dis[n]/k)<1e-3)puts("What a pity!");
		else puts("Good job,KK!");
	}
	return 0;
}

  

1723: 感恩节KK专场——陪学妹上课

时间限制: 1 Sec  内存限制: 128 MB 提交: 47  解决: 22 [提交][状态][讨论版]

题目描述

KK和学妹一起去上线性代数课,号称“数学小王子”的KK,听数学课就犯困,为了使KK不睡觉,学妹决定给KK玩一个游戏,来激发KK。

游戏是这样的:给出一个N*N的矩阵,矩阵中分别填入1--N*N个数字,不允许重复,使得矩阵中每行、每列以及每条对角线上的数字之和,全部相等。

为了降低难度,学妹告诉KK,每组测试数据的第一行的正中间的数字一定为1。数据保证N为奇数。

输入

给定一个整数t(0<t<1000),表示有t组测试数据。

每组测试数据有一个奇数N(0<N<200),表示填上N*N个数字。

输出

每组测试数据输出一个N*N的矩阵,每个数字占8位,右对齐,具体格式见输出样例。

样例输入

2 3 5

样例输出

8       1       6        3       5       7        4       9       2       17      24       1       8      15       23       5       7      14      16        4       6      13      20      22       10      12      19      21       3       11      18      25       2       9

题解:神奇的规律。。。。每次向右上跑,如果右上有数,就往下跑,再往右上跑。。。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#define mem(x,y) memset(x,y,sizeof(x))
#define T_T while(T--)
typedef long long LL;
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const int MAXN=210;
int dp[MAXN][MAXN];
int main(){
	int T,N;
	SI(T);
	T_T{
		SI(N);
		if(N==1){
			printf("%8d\n",1);continue;
		}
		mem(dp,0);
		int r=1,l=(1+N)>>1,sl,sr;
		dp[r][l]=1;
		int i=1;
		while(1){
			sl=l;sr=r;
			r=(r-1+N)%N;
			if(!r)r=N;
			l=(l+1)%N;
			if(!l)l=N;
			if(dp[r][l])l=sl,r=sr,r=(r+1)%N;
			if(!r)r=N;
			dp[r][l]=++i;
			if(i==N*N)break;
		}
		for(i=1;i<=N;i++){
			for(int j=1;j<=N;j++){
				printf("%8d",dp[i][j]);
			}
			puts("");
		}
	}
	return 0;
}

  

时间: 2024-10-29 02:59:47

河南理工大学第六届程序设计大赛的相关文章

“青软杯”安徽科技学院第六届程序设计大赛_专业组

Contest - "青软杯"安徽科技学院第六届程序设计大赛_专业组 Start time:  2015-04-18 08:00:00.0  End time:  2015-04-18 12:00:00.0 Current System Time:  2015-04-21 00:07:42.57  Contest Status:   Ended 关于举办"青软杯"安徽科技学院 第六届程序设计大赛通知 ACM 国际大学生程序设计竞赛 (International Co

哈尔滨理工大学第六届程序设计团队 I-Team

/* 以前做过一个插队的题,这个类似从后往前操作 */ #include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> #include <vector> #define N 600000 using namespace std; struct node { int x,y,z; //每一个操作,z表示这个操作是不是有效的 node(){} node(

哈尔滨理工大学第六届程序设计团队 E-Mod

/* 成功水过,哈哈哈,可能数据水吧 */ #include <stdio.h> #include <algorithm> #include <string.h> #include <queue> #include <set> #define t_mid (l+r >> 1) #define ls (o<<1) #define rs (o<<1 | 1) #define lson ls,l,t_mid #def

哈尔滨理工大学第六届程序设计团队 H-Permutation

/* 数学是硬伤......推了半小时推出来一个错误的公式 */ #include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> #define mod 1000000007 using namespace std; int n,t; /* 推出来的错误公式....... f[n]=f[n-1]+(n-1)*(f[n-1]-1); */ long long a[2

北京师范大学第十六届程序设计竞赛决赛-重现赛 ACFGI

A 塞特斯玛斯塔 题目描述 quailty是一名狂热的ACM音游选手,沉迷各种音乐游戏,比如Lunatic Rave 2,osu!之类的. 今天,quailty玩的是国内游戏厂商雷亚(并不是赞助商)出品的一款音乐游戏Cytus. 游戏中,玩家需要随着游戏界面中上下移动的扫描线来适时演奏对应音符. 当上下移动的黑色线(扫描线)与圆形的物体(音符)的圆心重合时点击音符. 普通音符(图中第一种)只需点击即可. 锁链音符(图中第二种)将带箭头的音符(滑块)按下后不要松开,并将滑块沿着斜线和圆点组成的路径

湖南省第6届程序设计大赛第一题 汽水瓶

题目A 汽水瓶 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水.小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子.然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板.如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 输入 输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示

牛客网 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-低年级组)求最大值

题目描述 给出一个序列,你的任务是求序列中 (a[j]-a[i])/(j-i)[1<=i<j<=n]的最大值 输入描述: 本题包含多组输入,每组输入第一行一个数字n,表示序列的长度.然后接下来一行输入n个数,表示原先序列的样子.数据范围:3<=n<=200000-1000000000<=a[i]<=1000000000 输出描述: 每组数据输出一行一个浮点数,保留两位小数,表示所求的最大值. 示例1 输入 5 2 4 6 8 10 输出 2.00 备注: 输入只有

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)A - 所有情况的和

题目描述 在acimo星球, tabris 是一名勇敢的屠龙勇士,在上绿岛屠龙前决定挑选N种装备武装自己,现在每种装备有两个,**但每种装备tabris必须选择拿一个**,**不能多也不能少**.每件装备有自己的属性值,能给tabris属性加成.对于不同种类的装备之间有叠加效果,如果选择多件装备,最终的属性加成为他们的乘积.若tabris初始属性值为0,最后属性加成的期望是多少. 输入描述: 有多组测试样例,输入到文件结束.每组测试数据的第一行包含一个正整数NN,表示装备的种类数.接下来N行,每

哈尔滨理工大学第七届程序设计竞赛初赛(高年级组)E - 音乐转换

题目描述 John是一位热衷的音游爱好者. 一天,他正在玩音游,碰到了一个难题.他面前有一个初始旋律,游戏目标是要把这一段初始旋律变成目标旋律.但是,难点在于,John并不能随意的改变这一旋律,每一次改变之后的旋律必须在他的旋律库中(或者为目标旋律),更令人头疼的是,每一次操作都需要消耗一定的combo,我们假设从A旋律改变成B旋律,那么这一次操作所消耗的Combo数是A与B的最大子旋律长度(最大公共子序列)再加1.需要注意的是,初始旋律必须变成旋律库中的一个旋律或者直接变成目标旋律,而旋律库中