“波导杯”安徽科技学院第七届程序设计大赛
Contest - 2016 "Bird Cup" ICPC7th@ahstu
Start time: 2016-04-23 08:00:00.0 End time: 2016-04-23 12:00:00.0
Current System Time: 2016-04-23 19:02:17.554 Contest Status: Ended关于举办“波导杯”安徽科技学院第七届程序设计大赛通知
ACM 国际大学生程序设计竞赛 (International Collegiate Programming Contest)是由美国计算机协会(ACM)主办的一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的著名竞赛。2010年以来,我校参与了历届安徽省 ACM 程序设计竞赛,并取得了优异的成绩。为选拔校 ACM 参赛队员,将举办“波导杯” 安徽科技学院第七届计算机程序设计大赛,热忱欢迎广大程序设计爱好者踊跃参加。
主办方:安徽科技学院教务处、信息与网络工程学院
承办方:信息与网络工程学院
赞助方:宁波波导软件有限公司(独家赞助)
一、 比赛时间:2016 年 4 月23(周六)上午 8:00~12:00
二、比赛地点:计算机与网络实验中心(力行楼六楼)
三、比赛设奖:设一等奖8%、二等奖12%、三等奖15%。
六、竞赛相关:
竞赛语言:C/C++/JAVA 环境:DevCpp /CodeBlock /Eclipse
比赛试题:采用 ICPC 样式——赛题 8~10道
注意事项:
· 1. 练习比赛网站(安科 OJ):http://183.167.205.82:8081/JudgeOnline/
· 2. 计算机系 ACM/ICPC 学生活动室位于力行楼六楼,欢迎交流。
比赛 QQ 群:173592864(波导杯第七届校ACM赛)
Problem Id | Title | |
1366 Problem A | ||
1367 Problem B | ||
1368 Problem C | ||
1369 Problem D | ||
1370 Problem E | ||
1371 Problem F | ||
1372 Problem G | ||
1373 Problem H | ||
1374 Problem I | ||
1375 Problem J |
[] [] []
# Dotaer vs Loler
Time Limit:1000MS Memory Limit:65536K
Total Submit:170 Accepted:31Description
小杨是一名Dota资深玩家,和众多Dota玩家一样,他和周围一群LOL玩家在一起有一种自然的优越感,然而身边的刀友确一个个投入了撸狗的行列,直到现在周围再没了
一个同行。。。他很愤慨,于是有了下面这道题目: 两个分别只含有Dotaer和Loler中的字母的字符串,长度(<10^6),请你分别统计两个字符串中所含字母能够组成Dotaer和Loler的最大数量(不区分大小写),然后根 据两者的数量判断输赢,若Loler数量大于Dotaer数量的3倍,则Loler win,反之Dotaer win。Input
每个输入包含多个测试用例,每个测试用包括两行,第一行为构成Dotaer的字符串,第二行为构成Loler的字符串。
Output
对于每个测试用例输出三行,第一行为Dotaer数量,第二行为Loler数量,第三行为哪方win。
Sample Input
otdarrreoddtooaaoooeerolereoreolrereoreol
Sample Output
Dotaer: 2Loler: 1Dotaer win
Source
icpc7th@ahstu
#include#include #include
# so so so easy
Time Limit:1000MS Memory Limit:65536K
Total Submit:46 Accepted:14Description
为了避免打光头的情况出现,仁慈的老赵在每次比赛中总会想方设法的加水题进去,一个两个三个.....。
现有一个完全由被空格所分开的英文单词构成的字符串(单词数量<=100),请你数出每个单词是连续第几次出现。(例如 so so so easy 结果为 1 2 3 1)Input
每个输入包含多个测试用例,每个测试用例为一个完全由被空格所分开的英文单词构成的字符串。
Output
对于每个测试用例,输出其每个单词是连续第几次出现。
Sample Input
so so so easy so so
Sample Output
1 2 3 1 1 2
Source
icpc7th@ahstu
#include#include #include #include using namespace std;void easy(string A){ int i; int num=0; string flag; string B[100]; istringstream sin(A); for(i=0;sin>>B[i];i++); flag=""; for(int j=0;j
# 反转链表
Time Limit:1000MS Memory Limit:65536K
Total Submit:5 Accepted:0Description
给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。
Input
每个输入包含多个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。
接下来有N行,每行格式为:
Address Data Next
其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。
Output
对每个测试用例,顺序输出反转后的链表(每个节点的 Address Data Next),其上每个结点占一行,格式与输入相同。
Sample Input
00100 6 400000 4 9999900100 1 1230968237 6 -133218 3 0000099999 5 6823712309 2 33218
Sample Output
00000 4 3321833218 3 1230912309 2 0010000100 1 9999999999 5 6823768237 6 -1
Source
icpc7th@ahstu
#include#include #include #include #include #include using namespace std;typedef struct{ int add; int data; int next;}Node;Node L[100001];vector N;vector ::iterator it;int scan(int &Add,int &num,int &n){ Node N; for(int i=0;i >N.add>>N.data>>N.next; L[N.add]=N; } return 1;}void L_sort(int start,int n){ int flag=start; while(flag!=-1) { N.push_back(L[flag]); flag=L[flag].next; }}void F_sort(int n){ int G=N.size()/n; for(int i=0;i >Add>>num>>n) { scan(Add,num,n); L_sort(Add,n); F_sort(n); print(); N.clear(); } return 0;}
# 贪吃蛇
Time Limit:1000MS Memory Limit:65536K
Total Submit:9 Accepted:2Description
有童年的孩子都玩过这个经典游戏,不过这里的规则又有点不同,现在有一个N*M(N,M<=100)的方形矩形,在这个矩形的每一个方格上都放有若干个樱桃,一条可爱的小蛇从矩形的
左上角开始出发,每次移动都只能移动一格,向右或向下,而每到达一格贪吃的小蛇都会吧该位置上的樱桃吃个一干二净,直到到达右下角时停止。而贪吃的小蛇不怕撑死,它只想吃到最多 的樱桃,请你告诉它他最多能吃到多少樱桃以及具体路线吧。(数据保证最优路线只有一条)Input
每个输入包含多个测试用例,每个测试用例第一行给出N,M,接下来N行M列数据代表每个位置上的樱桃个数。(矩阵坐标从(1,1)开始)。
Output
对于每个测试用例输出第一行为能吃到的最大樱桃个数,接下来为小蛇所需要走的路线的坐标,每个坐标占一行。
Sample Input
4 41 2 3 73 4 2 11 5 4 810 3 0 3
Sample Output
28(1,1)(2,1)(2,2)(3,2)(3,3)(3,4)(4,4)
Source
icpc7th@ahstu
#include#include #include #include #include using namespace std;typedef struct{ int m_sum; vector way;}MP;int mp[102][102];MP Mp[102][102];int N,M;string change(int a){ string A; while(a!=0) { A+=((a%10)+'0'); a/=10; } reverse(A.begin(),A.end()); return A;}void scan(){ for(int i=0;i<=M;i++) mp[0][i]=0; for(int i=0;i<=N;i++) mp[i][0]=0; for(int i=1;i<=N;i++) { for(int j=1;j<=M;j++) cin>>mp[i][j]; }}void hand_mp(){ for(int i=1;i<=N;i++) { for(int j=1;j<=M;j++) { Mp[i][j].m_sum=mp[i][j]+((mp[i][j-1]>=mp[i-1][j])?mp[i][j-1]:mp[i-1][j]); mp[i][j]= Mp[i][j].m_sum; Mp[i][j].way=(mp[i][j-1]>=mp[i-1][j])?(Mp[i][j-1]).way:(Mp[i-1][j]).way; Mp[i][j].way.push_back(change(i)); Mp[i][j].way.push_back(change(j)); } }}void print(){ cout< < >N>>M) { scan(); hand_mp(); print(); } return 0;}
# 均分硬币
Time Limit:1000MS Memory Limit:65536K
Total Submit:14 Accepted:4Description
有N堆硬币,编号分别为 1,2,…, N(N<=100) 每堆上有若干个硬币,可以在任一堆上取若干个硬币,然后移动。移动规则为:在编号为 1 堆上取的硬币,只能移到编号为 2 的堆上;
在编号为 N 的堆上取的硬币,只能移到编号为 N-1 的堆上;其他堆上取的硬币,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上硬币 数都一样多。例如 N=4,4 硬币数分别为: ① 9 ② 8 ③ 17 ④ 6 移动3次可达到目的。Input
每个输入包含多个测试用例,每个测试用例第一行为整数N硬币堆数,接下来一行N个数为相应堆上硬币的数量。
Output
对于每个测试用例,输出其最少需要移动次数,若无法均分则输出“Oh no!”
Sample Input
49 8 17 6
Sample Output
3
Source
icpc7th@ahstu
#include#include using namespace std;int avg(int *A,int n){ int sum=0; int avge; int flag=0; for(int i=0;i >N) { for(int i=0;i >A[i]; avg(A,N); } return 0;}
# 丢啊丢啊丢手绢
Time Limit:1000MS Memory Limit:65536K
Total Submit:17 Accepted:4Description
在安科图书馆前的草地上围坐着N个同学1,2,3,.....N.(按顺序围成一个圈),然后从其中一个同学开始,拿着一手绢按编号从小到大的方向一步一步绕着圈子走,
一步经过一个同学,若干步后把手绢交给面前的同学,接到手绢的同学不改变方向用同样的方式把手绢交给另一个同学后淘汰出游戏,凡是一个同学离开圈子,剩下同学 把空缺消除再构成一个圆(相对位置不变)。现在告诉你开始同学的编号和手帕n次行进的步数,你知道终剩下哪些同学吗?Input
每个输入包含多个测试用例,每个测试用例包括两部分:
第一部分三个数字num(参与游戏学生总数),i(初始学生编号),n(手绢移动的次数)。 第二部分n个整数为n次手绢分别移动的步数。Output
输出游戏结束后所剩学生的编号(按升序输出)。
Sample Input
6 2 32 3 4
Sample Output
5 6
Source
icpc7th@ahstu
#include#include #include #include using namespace std;void init(vector &A,int num){ for(int i=0;i<=num;i++){ A.push_back(i); }}void game(vector A,int *way,int n,int first){ int index; A.erase(A.begin()+first); index=first-1; for(int i=0;i