问题描述
试题编号: | 201709-2 |
试题名称: | 公共钥匙盒 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。 输入格式 输入的第一行包含两个整数N, K。 输出格式 输出一行,包含N个整数,相邻整数间用一个空格分隔,依次表示每个挂钩上挂的钥匙编号。 样例输入 5 2 样例输出 1 4 3 2 5 样例说明 第一位老师从时刻3开始使用4号教室的钥匙,使用3单位时间,所以在时刻6还钥匙。第二位老师从时刻2开始使用钥匙,使用7单位时间,所以在时刻9还钥匙。 样例输入 5 7 样例输出 1 2 3 5 4 评测用例规模与约定 对于30%的评测用例,1 ≤ N, K ≤ 10, 1 ≤ w ≤ N, 1 ≤ s, c ≤ 30; |
import sys
a,b=sys.stdin.readline().split()
a=int(a)
b=int(b)
work=list(range(1,a+1))
#print(work)
thing=[]
timetable={}
for i in range(0,b):
k=sys.stdin.readline().split()
k=[int(x) for x in k]
k[2] += k[1]
timetable[k[1]]=0
timetable[k[2]]=0
thing.append(k)
thing.sort(key=lambda x:(x[1],x[0]))
thing.sort(key=lambda x:(x[2],x[0]))
maxtime=thing[b-1][2]
for c in range(1,maxtime+1):
if(c in timetable):
for th in thing:
if(th[2] == c):
for index in range(0,a):
if(work[index]==0):
work[index]=th[0]
break
#print(work)
if (th[1] == c):
work[work.index(th[0])] = 0
#print(c)
#print(work)
for kk in work:
sys.stdout.write(str(kk)+' ')
试题编号: | 201312-2 |
试题名称: | ISBN号码 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。 输入格式 输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。 输出格式 输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。 样例输入 0-670-82162-4 样例输出 Right 样例输入 0-670-82162-0 样例输出 0-670-82162-4 |
其实很简单的题 做麻烦了 不过用到了大佬的STL实现的split (java和Python都可以用 然而c++没有)
#include
#include
#include
using namespace std;
vector split(const string &s, const string &seperator)
{
vector result;
typedef string::size_type string_size;
string_size i = 0;
while(i != s.size())
{
//找到字符串中首个不等于分隔符的字母;
int flag = 0;
while(i != s.size() && flag == 0)
{
flag = 1;
for(string_size x = 0; x < seperator.size(); ++x)
if(s[i] == seperator[x])
{
++i;
flag = 0;
break;
}
}
//找到又一个分隔符,将两个分隔符之间的字符串取出;
flag = 0;
string_size j = i;
while(j != s.size() && flag == 0)
{
for(string_size x = 0; x < seperator.size(); ++x)
if(s[j] == seperator[x])
{
flag = 1;
break;
}
if(flag == 0)
++j;
}
if(i != j)
{
result.push_back(s.substr(i, j-i));
i = j;
}
}
return result;
}
int main()
{
string aa;
while(cin>>aa)
{
vector v = split(aa, "-");
int tt=0;
int c=1;
for(vector::size_type i = 0; i != v.size()-1; ++i)
{
for(int j=0;j
试题编号: | 201403-2 |
试题名称: | 窗口 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。 输入格式 输入的第一行有两个正整数,即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10) 输出格式 输出包括 M 行,每一行表示一次鼠标点击的结果。如果该次鼠标点击选择了一个窗口,则输出这个窗口的编号(窗口按照输入中的顺序从 1 编号到 N);如果没有,则输出"IGNORED"(不含双引号)。 样例输入 3 4 样例输出 2 样例说明 第一次点击的位置同时属于第 1 和第 2 个窗口,但是由于第 2 个窗口在上面,它被选择并且被置于顶层。 |
#include
#include
using namespace std;
struct node
{
int x1,y1,x2,y2,id;
};
struct node xx[15];;
int main()
{
int m,n;
int a,b;
while(~scanf("%d %d",&m,&n))
{
for(int i=0; i=0; i--)
{
if((a>=xx[i].x1&&b>=xx[i].y1&&a<=xx[i].x2&&b<=xx[i].y2))
{
f=1;
struct node tmp;
tmp=xx[i];
for(int k=i; k
试题编号: | 201409-2 |
试题名称: | 画图 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。 输入格式 输入的第一行包含一个整数n,表示要画的矩形的个数。 输出格式 输出一个整数,表示有多少个单位的面积被涂上颜色。 样例输入 2 样例输出 15 评测用例规模与约定 1<=n<=100,0<=横坐标、纵坐标<=100。 |
#include
#include
using namespace std;
int tt[105][105];
int main()
{
int n;
while(cin>>n)
{
memset(tt,0,sizeof(tt));
int a,b,c,d;
for(int i=0; i>a>>b>>c>>d;
for(int i=a; i
试题编号: | 201412-2 |
试题名称: | Z字形扫描 |
时间限制: | 2.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 输入格式 输入的第一行包含一个整数n,表示矩阵的大小。 输出格式 输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。 样例输入 4 样例输出 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 评测用例规模与约定 1≤n≤500,矩阵元素为不超过1000的正整数。 |
#include
#include
using namespace std;
int tt[505][505];
int n;
void solve()
{
int nowx=0,nowy=0;
cout<=0&&nowy>=0)
cout<=0&&nowy>=0)
cout<>n)
{
for(int i=0; i>tt[i][j];
}
solve();
}
return 0;
}
试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 样例输出 3 4 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
#include
#include
#include
#include
using namespace std;
typedef struct node
{
int id,num;
} tt;
tt xx[1005];
bool cmp(node a,node b)
{
if(a.num!=b.num)
return a.num>b.num;
else
return a.id>n)
{
int yy[1005];
int tmp;
memset(yy,0,sizeof(yy));
int minn=1005,maxn=-1;
for(int i=0; i0)
{
xx[cnt].id=i;
xx[cnt++].num=yy[i];
}
sort(xx,xx+cnt,cmp);
for(int i=0;i
试题编号: | 201509-2 |
试题名称: | 日期计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 输入格式 输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。 输出格式 输出两行,每行一个整数,分别表示答案的月份和日期。 样例输入 2015 样例输出 3 样例输入 2000 样例输出 2 |
#include
#include
#include
#include
using namespace std;
int days[13]= {29,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int year,day;
while(cin>>year)
{
cin>>day;
int f=0;
if((year%4==0&&year%100!=0)||year%400==0)
f=1;
int now=0;
int i=1;
while(now
试题编号: | 201512-2 |
试题名称: | 消除类游戏 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 输入格式 输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。 输出格式 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 样例输入 4 5 样例输出 2 2 3 0 2 样例说明 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 样例输入 4 5 样例输出 2 2 3 0 2 样例说明 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 评测用例规模与约定 所有的评测用例满足:1 ≤ n, m ≤ 30。 |
#include
#include
#include
#include
using namespace std;
int tt[35][35];
int ss[35][35];
int main()
{
int n,m;
while(cin>>n>>m)
{
for(int i=0; i>tt[i][j];
memset(ss,0,sizeof(ss));
for(int i=0;i
试题编号: | 201604-2 |
试题名称: | 俄罗斯方块 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。 输入格式 输入的前15行包含初始的方格图,每行包含10个数字,相邻的数字用空格分隔。如果一个数字是0,表示对应的方格中没有方块,如果数字是1,则表示初始的时候有方块。输入保证前4行中的数字都是0。 输出格式 输出15行,每行10个数字,相邻的数字之间用一个空格分隔,表示板块下落后的方格图。注意,你不需要处理最终的消行。 样例输入 0 0 0 0 0 0 0 0 0 0 样例输出 0 0 0 0 0 0 0 0 0 0 |
我用了一个超级暴力的办法 看了其他人写的真是简洁 模拟下落过程 只要没冲突就不断下降 还好数据量小
#include
using namespace std;
int mapp[24][12];
int mapp2[24][12];
int xx[5][5];
int c;
void change()
{
for(int i=5; i<=19; i++)
for(int j=1; j<=10; j++)
{
mapp2[i][j]=mapp[i][j];
}
}
bool check()
{
for(int i=5; i<=19; i++)
for(int j=1; j<=10; j++)
{
if(mapp2[i][j]==2)
return false;
}
return true;
}
void process(int line)
{
for(int i=line,x=1; x<=4&&i<=line+3; i++,x++)
for(int j=c,y=1; y<=4&&j<=c+3; j++,y++)
{
mapp2[i][j]+=xx[x][y];
}
}
int main()
{
for(int i=5; i<=19; i++)
for(int j=1; j<=10; j++)
{
cin>>mapp[i][j];
mapp2[i][j]=mapp[i][j];
}
int maxn;
for(int i=1; i<=4; i++)
for(int j=1; j<=4; j++)
{cin>>xx[i][j];
if(xx[i][j])
maxn=i;
}
cin>>c;
int k;
for(k=2;k<=19-maxn+1;k++)
{
process(k);
if(check())
{
change();
}
else
break;
}
change();
process(k-1);
for(int i=5; i<=19; i++)
{
for(int j=1; j<=10; j++)
{
cout<
试题编号: | 201609-2 |
试题名称: | 火车购票 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 输入格式 输入的第一行包含一个整数n,表示购票指令的数量。 输出格式 输出n行,每行对应一条指令的处理结果。 样例输入 4 样例输出 1 2 样例说明 1) 购2张票,得到座位1、2。 评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 100,所有购票数量之和不超过100。 |
#include
#include
using namespace std;
int tt[105];
int main()
{
int n;
while(cin>>n)
{
int z;
memset(tt,0,sizeof(tt));
for(int i=0; i>z;
int c,begin1;
int f=0;
for(int i=1; i<=96; i+=5)
{
begin1=i;
c=0;
for(int j=i; j=z)
break;
}
if(c>=z)
{
f=1;
break;
}
}
if(f)
{
for(int i=begin1; i
试题编号: | 201612-2 |
试题名称: | 工资计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算: 输入格式 输入的第一行包含一个整数T,表示小明的税后所得。所有评测数据保证小明的税前工资为一个整百的数。 输出格式 输出一个整数S,表示小明的税前工资。 样例输入 9255 样例输出 10000 评测用例规模与约定 对于所有评测用例,1 ≤ T ≤ 100000。 |
找范围找到吐血
#include
#include
using namespace std;
int cc[10]={0,1455,4155,7755,27255,41255,57505};
int main()
{
int n;
while(cin>>n)
{
int c=n;
c-=3500;
int i=0;
while(c>=cc[i]&&i<=6)
{
i++;
}
if(i==0)
{
cout<
试题编号: | 201703-2 |
试题名称: | 学生排队 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列。 输入格式 输入的第一行包含一个整数n,表示学生的数量,学生的学号由1到n编号。 输出格式 输出一行,包含n个整数,相邻两个整数之间由一个空格分隔,表示最终从前向后所有学生的学号。 样例输入 8 样例输出 1 2 4 3 5 8 6 7 评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移动均合法。 |
#include
#include
#include
using namespace std;
typedef struct node
{
int x,id;
} xx;
int n,m;
xx tt[1005];
bool cmp(node a,node b)
{
return a.id>n>>m)
{
for(int i=1; i<=n; i++)
{
tt[i].x=tt[i].id=i;
}
for(int i=0; i>x>>y;
int zz=findt(x);
if(y>0)
{
for(int j=tt[zz].id+1; j<=tt[zz].id+y; j++)
{
tt[j].id--;
}
tt[zz].id+=(y);
}
else
{
for(int j=tt[zz].id+y; j<=tt[zz].id-1; j++)
{
tt[j].id++;
}
tt[zz].id+=(y);
}
sort(tt+1,tt+n+1,cmp);
}
sort(tt+1,tt+n+1,cmp);
for(int i=1; i<=n; i++)
{
cout<
试题编号: | 201712-2 |
试题名称: | 游戏 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 输入格式 输入一行,包括两个整数n和k,意义如题目所述。 输出格式 输出一行,包含一个整数,表示获胜的小朋友编号。 样例输入 5 2 样例输出 3 样例输入 7 3 样例输出 4 数据规模和约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。 |
#include
#include
#include
#include
using namespace std;
int main()
{
int n,m;
while(cin>>n>>m)
{
queue xx;
for(int i=1; i<=n; i++)
{
xx.push(i);
}
int cnt=1;
while(xx.size()!=1)
{
int x=xx.front();
if(cnt%m!=0&&cnt%10!=m)
{
xx.push(x);
xx.pop();
}
else
{
xx.pop();
}
cnt++;
}
cout<
试题编号: | 201803-2 |
试题名称: | 碰撞的小球 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。 提示 因为所有小球的初始位置都为偶数,而且线段的长度为偶数,可以证明,不会有三个小球同时相撞,小球到达线段端点以及小球之间的碰撞时刻均为整数。 输入格式 输入的第一行包含三个整数n, L, t,用空格分隔,分别表示小球的个数、线段长度和你需要计算t秒之后小球的位置。 输出格式 输出一行包含n个整数,用空格分隔,第i个整数代表初始时刻位于ai的小球,在t秒之后的位置。 样例输入 3 10 5 样例输出 7 9 9 样例说明 初始时,三个小球的位置分别为4, 6, 8。 样例输入 10 22 30 样例输出 6 6 8 2 4 0 4 12 10 2 数据规模和约定 对于所有评测用例,1 ≤ n ≤ 100,1 ≤ t ≤ 100,2 ≤ L ≤ 1000,0 < ai < L。L为偶数。 |
#include
#include
#include
#include
using namespace std;
typedef struct node
{
int index,v;
} ball;
ball b[105];
int main()
{
int n,l,t;
while(cin>>n>>l>>t)
{
for(int i=0; i>b[i].index;
b[i].v=1;
}
for(int i=0; i