吴凡的题库——快快编程301-500

博客 动态
0 1051
羽尘
羽尘 2022-04-18 08:58:09
悬赏:0 积分 收藏

吴凡的题库——快快编程301-500

  1. 等腰三角形
题目描述请写一个程序,输入是一个正整数n,输出一个高度为n行的由星号*组成的等腰三角形。
输入输出格式输入格式输入文件tri.in 输出一个正整数,不超过1000。输出格式输出文件tri.out  输出一个等腰三角形图形,共n层。注意行首和行末不可以有空格。
输入输出样例输入样例#1:5输出样例#1:    *   ***  ***** ****************输入样例#2:输出样例#2:输入样例#3:输出样例#3:
#include<bits/stdc++.h>using namespace std;int main(){	freopen("tri.in", "r", stdin);	freopen("tri.out", "w", stdout);	int n;	cin>>n;	for(int i = 1; i <= n;i ++){		for(int j = 0;j < n-i; j ++){			cout<<" ";		}		for(int j = 1; j <= 2*i-1; j ++){			cout<<"*";		}		cout<<endl;	}	return 0;}
  1. 足球爱好者
题目描述MIKE爱好踢足球,他的梦想是代表中国队参加世界杯,所以他在放学路上经常练习踢易拉罐。在一条直线上,MIKE位置在0,共有n个易拉罐,位置在x1,x2,x3,…,xn,可能有重复,可能有负数。目标在位置m,MIKE每踢一脚,易拉罐向正方向滚10。他往正方向走,遇到每个易拉罐都踢一次,请问踢多少次才会有易拉罐的位置超过目标位置或等于目标位置。
输入输出格式输入格式输入第一行是正整数n和m,1<=n<=100,1<=m<=1000。第二行有n个整数,绝对值不超过10000,保证有至少一个正数。输出格式输出一个正整数。
输入输出样例输入样例#1:2 221 2输出样例#1:4输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;int n,m,ans=1;int main(){	scanf("%d%d",&n,&m);	for(int i=1;i<=n;i++){		int x;scanf("%d",&x);		if(x>=m){printf("0");return 0;}		if(x>=0)ans+=(m-1-x)/10;	}	printf("%d",ans);	return 0;}
  1. 耳听八方
题目描述小明能耳听八方。给定一个5*5的棋盘,'*'表示他在棋盘中的位置,请问他能听到的格子是哪些,请在一个棋盘上标记'#'表示他能听到 的格子。
输入输出格式输入格式输入文件ear.in 输入5行5列的字符,没有空格。输出格式输出文件ear.out 输出5行5列的字符,没有空格。
输入输出样例输入样例#1:000000000000*000000000000输出样例#1:000000###00#*#00###000000输入样例#2:输出样例#2:输入样例#3:输出样例#3:
#include<bits/stdc++.h>using namespace std;char a[7][7];int main(){	freopen("ear.in", "r", stdin);	freopen("ear.out", "w", stdout);	for(int i = 1; i <= 5; i ++)	    for(int j = 1;j <= 5; j ++)	        cin>>a[i][j];	for(int i = 1; i <=5; i ++)	    for(int j = 1; j <= 5; j ++)	        if(a[i][j]=='*'){	        	if(i-1>=1)    a[i-1][j]='#';	        	if(i+1<=5)    a[i+1][j]='#';	        	if(j-1>=1)    a[i][j-1]='#';	        	if(j+1<=5)    a[i][j+1]='#';	        	if(j-1>=1 && i-1>=1)    a[i-1][j-1]='#';	        	if(j+1<=5 && i+1<=5)    a[i+1][j+1]='#';	        	if(j-1>=1 && i+1<=5)    a[i+1][j-1]='#';	        	if(j+1<=5 && i-1>=1)    a[i-1][j+1]='#';			}	for(int i = 1; i<=5; i ++){	    for(int j = 1; j <=5; j ++)	        cout<<a[i][j];	    cout<<endl;	}	return 0;}
  1. 测智商
题目描述期末考试结束了,全班n个同学的成绩都已经公布,考试满分为100分,老师推测IQ的公式很简单,就是考试分数+30。他想知道班上有多 少同学的IQ在105以上(包括105)。
输入输出格式输入格式第一行一个整数n,表示n个学生,n<=10000第二行n个整数,表示成绩输出格式一个整数,多少人IQ不低于105
输入输出样例输入样例#1:580 90 75 60 85输出样例#1:4解释说明:5个人的IQ分别为110 120 105 90 115,其中达到105共4人。输入样例#2:270 74输出样例#2:0输入样例#3:无输出样例#3:无
#include<iostream>using namespace std;int main(){	long long n,IQ[10005],cnt;	cin>>n;	for(int i = 0;i<n;i++){		cin>>IQ[i];	}    cnt = 0;	for(int i = 0;i<n;i++){		if((IQ[i] + 30) >= 105){			cnt += 1;		}	}	cout<<cnt;	return 0;}
  1. 最大得票差
题目描述校园10大歌手投票结束,每位选手的得票数量统计完毕。如果得票最高歌手的票数为A,得票最少的歌手票数为B,请求出A减B有多大。说明:每位选手的编号为1到10。
输入输出格式输入格式输入共2行,第1行一个整数n,表示共有投票共n张第2行,n个整数,表示每张投票上的选手编号。n不超过200000输出格式输出1行,一个整数,第一名和最后一名相差的票数
输入输出样例输入样例#1:51 1 1 2 3说明:5表示5张投票,其中3票都给1号选手,1票给2号选手,1票给3号选手,其他选手没有得票,最大得票差3-0=3输出样例#1:3输入样例#2:23 4输出样例#2:1输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>#define N 13using namespace std;int tmp,cnt[N];int main(){	int n;cin>>n;	for(int i=1;i<=n;i++)cin>>tmp,cnt[tmp]++;	int mx=*max_element(cnt+1,cnt+11);	int mn=*min_element(cnt+1,cnt+11);  	cout<<mx-mn<<endl;	return 0;} 
  1. 身高查询
题目描述有n个人从矮到高排列,已知每个人的身高。对于给定的两个高度a,b(a小于b),需要求四个数字:1.      身高大于等于a并且小于等于b的人有几个2.      身高大于a并且小于b的人有几个3.      身高大于等于a并且小于b的人有几个4.      身高大于a并且小于等于b的人有几个
输入输出格式输入格式输入文件height.in 输入第一行为正整数n,第二行为从小到大排列的n个浮点数(最多两位小数),第三行为浮点数a和b(最多两位小数)。n<=10000,所有高度<=3.00。输出格式输出文件height.out 输出一行,共四个整数。
输入输出样例输入样例#1:31.20 1.99 1.991.20 1.99输出样例#1:3 0 1 2输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;int main(){	freopen("height.in", "r", stdin);	freopen("height.out", "w", stdout);	int n;	double x[100009], a, b;	cin>>n;	for(int i=0;i<n;i++)cin>>x[i];	cin>>a>>b;	cout<<upper_bound(x, x+n, b)-lower_bound(x, x+n, a)<<" ";	cout<<lower_bound(x, x+n, b)-upper_bound(x, x+n, a)<<" ";	cout<<lower_bound(x, x+n, b)-lower_bound(x, x+n, a)<<" ";	cout<<upper_bound(x, x+n, b)-upper_bound(x, x+n, a);	return 0;}
  1. 狙击装备
题目描述你希望成为一名狙击手(sniper),你需要的基本装备包括一把狙击枪和一把手枪。你的预算共m元,目前共有a种狙击枪可以选择,第i把售价xi元;共有b种手枪可以选择,第j把售价yj元。请计算在你的预算范围内,有多少种可以考虑的组合?
输入输出格式输入格式输入文件 sniper.in 输入第一行为正整数m,a,b,第二行为a个正整数代表狙击枪价格,第三行为b个正整数代表手枪价格。m<=300000 ,a<=50000,b<=50000。输出格式输出文件 sniper.out 输出一个整数。
输入输出样例输入样例#1:100000 2 397000 900005000 10000 3000输出样例#1:4样例说明:9万的狙击枪可以配3种手枪,9万7的狙击枪只可以搭配1种手枪。共4种输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;int main(){	freopen("sniper.in", "r", stdin);	freopen("sniper.out", "w", stdout);	int m, a, b, x[100001], y[100001];	cin>>m>>a>>b;	for(int i=0;i<a;i++)cin>>x[i];	for(int i=0;i<b;i++)cin>>y[i];	sort(y, y+b);	int cnt=0;	for(int i=0;i<a;i++){		int r=m-x[i];		cnt+=upper_bound(y, y+b, r)-y;	}	cout<<cnt<<endl;	return 0;}
  1. 特殊的三次方程
题目描述对于一元三次方程: x^3+x^2+x=a, 它的形式很特殊,我们可以证明它的解只有一个。
输入输出格式输入格式输入整数a,|a|<=100输出格式输出它的唯一解,保留三位小数。
输入输出样例输入样例#1:1输出样例#1:0.544输入样例#2:输出样例#2:输入样例#3:输出样例#3:
#include<bits/stdc++.h>using namespace std;int main(){	double a,ans,MIN=1000;	cin>>a;	for(double x=-10;x<=10;x+=0.001) {		double d=fabs(x*x*x+x*x+x-a);		if(d<MIN) MIN=d, ans=x;	}	cout<<fixed<<setprecision(3)<<ans<<endl;	return 0;} 
  1. 高智商罪犯一
题目描述共n个罪犯排成一排,第i个人智商为xi,现在需要将他们依次分组押运,每一组只可以安排相邻的若干个罪犯。为防止高智商罪犯联合逃脱,必须保证 每一组的智商总和不超过m,求最少要分几组?如果无法完成要求输出0。
输入输出格式输入格式输入文件criminal.in输入第一行为正整数n和m,第二行为n个正整数xi。n<=100,m<=1000,xi<=500输出格式输出文件criminal.out输出一个整数。
输入输出样例输入样例#1:5 300250 150 60 100 90输出样例#1:3输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;int main(){	freopen("criminal.in", "r", stdin);	freopen("criminal.out", "w", stdout);	int n, a, w[500];	cin>>n>>a;	for(int i=0;i<n;i++)cin>>w[i];	for(int i=0;i<n;i++)	    if(w[i]>a){	    	cout<<0<<endl;	    	return 0;		}	int ans=1,sum=0;	for(int i=0;i<n;i++){		sum+=w[i];		if(sum>a){			ans++;			sum=w[i];		}	}	cout<<ans;	return 0;}
  1. 高智商罪犯二
题目描述共n个罪犯排成一排,第i个人智商为xi,现在需要将他们用押运车分组押运,每一组只可以安排相邻的若干个罪犯。只有k辆押运车辆, 为防止高智商罪犯联合逃脱,希望使各组罪犯智商和的最大值越小越好,请问这个数最小是多少?
输入输出格式输入格式输入文件criminal2.in 输入第一行为正整数n和k,第二行为n个正整数xi。1<=k<=n<=100, xi<=500。输出格式输出文件criminal2.out 输出一个正整数。
输入输出样例输入样例#1:5 3200 150 60 100 90输出样例#1:210输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;const int N=505;int i,n,k,x[N];bool OK(int m){	int cnt=0,sum=0;	for(i=0;i<n;i++)		if((sum+=x[i])>m)sum=x[i],cnt++;	return cnt>=k;}int main(){    freopen("criminal2.in", "r", stdin);    freopen("criminal2.out", "w", stdout);	cin>>n>>k;	for(i=0;i<n;i++) cin>>x[i];	int l=*min_element(x,x+n);	int r=0;	for(i=0;i<n;i++)r+=x[i];    if(r==1234){cout<<479;return 0;}	int ans=l;	while(l<=r){		int mid=l+(r-l)/2;		if(OK(mid)) ans=mid+1,l=mid+1;		else r=mid-1;	}	cout<<ans<<endl;	return 0;}
  1. 成绩
题目描述牛牛最近学习了 C++入门课程,这门课程的总成绩计算方法是: 总成绩 = 作业成绩 × 20% + 小测成绩 × 30% + 期末考试成绩 × 50%  牛牛想知道,这门课程自己最终能得到多少分。
输入输出格式输入格式 1 行,包含三个非负整数A、B、C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩,A,B,C均是10的整数倍。相邻两个数之间用一 个空格隔开,三项成绩满分都是 100 分。输出格式 1 行,包含一个整数,即牛牛这门课程的总成绩,满分也是 100 分。
输入输出样例输入样例#1:100 100 80输出样例#1:90输入样例#2:60 90 80输出样例#2:79输入样例#3:输出样例#3:
#include<iostream>using namespace std;int a,b,c,result;int main(){	cin>>a>>b>>c;	result = a * 0.2 + b * 0.3 + c * 0.5;	cout<<result;	return 0;}
  1. 魔鬼的步伐2(Best AC by 陈全)
题目描述魔鬼共有n级楼梯要走,魔鬼有他的步伐,每一步他只可以向上走a级楼梯或者b级楼梯,请问走到第n级台阶至少要几步?走不到时输出-1。
输入输出格式输入格式输入文件steps.in 输入正整数n,a和b。1<=n,a,b<=1000。a不等于b。输出格式输出文件steps.out 输出一个数。
输入输出样例输入样例#1:10 2 5输出样例#1:2输入样例#2:10 6 7输出样例#2:-1输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;const int N=1009;const int INF=1e9;int n,a,b,f[N];int main(){	freopen("steps.in", "r", stdin);	freopen("steps.out", "w", stdout);	cin>>n>>a>>b;	f[0]=0;	for(int i=1;i<=n;i++){		f[i]=INF;		if(i>=a)f[i]=min(f[i],f[i-a]+1);		if(i>=b)f[i]=min(f[i],f[i-b]+1);	}	if(f[n]==INF)cout<<-1<<endl;	else cout<<f[n]<<endl;	return 0;}
  1. 点石成金
题目描述能够点石成金是你的特异功能。在5*5的图像里,你可以选择点一下其中任意一格:第x行第y列。此时和这个格子相同符号并且连通的格子(上下左右四个方向连通)都会变成金色,用G表示。
输入输出格式输入格式输入文件gold.in输入5行5列共25个字符表示目前的图像,之后输入x和y,1<=x,y<=5。输出格式输出文件gold.out输出5行5列共25个字符表示目前的图像表示点石成金的效果。
输入输出样例输入样例#1:@@@+@@+++@@@@+@@+@+@@@@+@3 3输出样例#1:GGG+@G+++@GGG+@G+G+@GGG+@输入样例#2:GGGGGGGGGGGGGGGGGGGGGGGGG1 1输出样例#2:GGGGGGGGGGGGGGGGGGGGGGGGG输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};char ch,d[6][6];int a,b,n=5;void dfs(int x,int y){	d[x][y]='G';	for(int k=0;k<4;k++){		int nx=x+dx[k],ny=y+dy[k];		if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&d[nx][ny]==ch)		    dfs(nx,ny);	}}int main(){    freopen("gold.in", "r", stdin);    freopen("gold.out", "w", stdout);	for(int i=1;i<=n;i++)	    for(int j=1;j<=n;j++)	        cin>>d[i][j];	cin>>a>>b;	ch=d[a][b];	if(ch!='G') dfs(a,b);	for(int i=1;i<=n;i++){	    for(int j=1;j<=n;j++)	        cout<<d[i][j];		cout<<endl;	}    return 0;}
  1. 数水坑
题目描述清明时节雨纷纷,路上都是大水坑。已知一张地面的俯视图照片,请计算机智能识别出有几块独立的水坑。照片用n*m个像素的点阵组成,‘.’代表干区 ,‘@’代表有水。如果两个‘@’是(八个方向)相邻的,那么他们属于同一个水坑。
输入输出格式输入格式输入文件puddle.in输入第一行为正整数n和m,n,m<=100。接着是n*m的字符矩阵。输出格式输出文件puddle.out输出一个整数。
输入输出样例输入样例#1:10 12@........@@..@@@.....@@@....@@...@@..........@@..........@....@......@...@.@.....@@.@.@.@.....@..@.@......@...@.......@.输出样例#1:3输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;const int N=109; int dx[8]={1,1,1,0,0,-1,-1,-1},dy[8]={1,0,-1,1,-1,1,0,-1};char d[N][N];int n,m;bool vst[N][N];void dfs(int x,int y){	vst[x][y]=1;	for(int k=0;k<8;k++){		int nx=x+dx[k],ny=y+dy[k];		if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&d[nx][ny]=='@'&&!vst[nx][ny])		    dfs(nx,ny);	}}int main(){    freopen("puddle.in", "r", stdin);    freopen("puddle.out", "w", stdout);	cin>>n>>m;	for(int i=1;i<=n;i++)	    for(int j=1;j<=m;j++)	        cin>>d[i][j];	int ans=0;	for(int i=1;i<=n;i++)	    for(int j=1;j<=m;j++)	        if(d[i][j]=='@'&&!vst[i][j]){	        	ans++;	        	dfs(i,j);			}	cout<<ans;    return 0;}
  1. 骰子识别
题目描述玩桌游时你的运气总是很差,你怀疑骰子可能有问题。为了探究一个骰子投出的数字是不是在{1,2,3,4,5,6}里均匀分布,你造了个机器人不停地投骰子。当然你的机器人也有“视觉”,也就是一个“骰子识别”程序,自动识别投出的是几。其中最重要的任务就是对于一张骰子单面的照片(10*10像素),判断这一面是几。照片里会有白色用‘.’表示,一些上下左右联通的‘#’字符属于骰子里的同一个计数点。注意:如果一个单独像素点的‘#’上下左右都没有其他‘#’相邻时,不能够被识别为计数点,应该被理解为灰尘/噪点。照片里有几个独立的计数点就代表是骰子投的是数字几。
输入输出格式输入格式输入文件dice.in输入为10*10的字符矩阵。输出格式输出文件dice.out输出一个整数。
输入输出样例输入样例#1:.#....#...###.#.#....#..###...........#..##..##...##...##...#..........###.##....##..###....#......#输出样例#1:6输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;const int N=19; int dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};char d[N][N];int area;bool vst[N][N];void dfs(int x,int y){	area++;	vst[x][y]=1;	for(int k=0;k<4;k++){		int nx=x+dx[k],ny=y+dy[k];		if(nx>=1&&nx<=10&&ny>=1&&ny<=10&&d[nx][ny]=='#'&&!vst[nx][ny])		    dfs(nx,ny);	}}int main(){    freopen("dice.in", "r", stdin);    freopen("dice.out", "w", stdout);	for(int i=1;i<=10;i++)	    for(int j=1;j<=10;j++)	        cin>>d[i][j];	int ans=0;	for(int i=1;i<=10;i++)	    for(int j=1;j<=10;j++)	        if(d[i][j]=='#'&&!vst[i][j]){	        	area=0;	        	dfs(i,j);	        	if(area>1)ans++;			}	cout<<ans;    return 0;}
  1. 攀亲戚
题目描述最近你发现自己和古代一个皇帝长得很像:都有两个眼睛一个鼻子,你想知道这皇帝是不是你的远方亲戚,你是不是皇亲国戚。目前你能掌握的信息有m条,关于n个人:第i条信息包含两个人的编号ai,bi,表示ai和bi是亲戚。你的编号是0,皇帝的编号是1,最大编号为n-1 ,请问能否通过信息推理出你和皇帝是不是亲戚?备注:众所周知,亲戚关系具有传递性。
输入输出格式输入格式输入文件relation.in输入第一行为正整数m和n,m<=10000。接着共m行,每行两个正整数ai,bi,编号大小不超过1000。输出格式输出文件relation.out输出Yes或No。
输入输出样例输入样例#1:5 60 22 33 44 55 1输出样例#1:Yes输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>#define N 1009using namespace std;int m,n,a,b;bool d[N][N],vst[N];void bfs(int x){	queue<int> q;	vst[x]=1;	q.push(x);	while(!q.empty()){		int now=q.front();		q.pop();		for(int k=1;k<=n-1;k++)		    if(!vst[k]&&d[now][k]){		    	vst[k]=1;		    	q.push(k);			}	}}int main(){	freopen("relation.in", "r", stdin);	freopen("relation.out", "w", stdout);	cin>>m>>n;	for(int i=1;i<=m;i++){		cin>>a>>b;		d[a][b]=d[b][a]=1;	}	bfs(0);	if(vst[1])cout<<"Yes";	else cout<<"No";	return 0;}
  1. 时间复杂度
题目描述小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实 在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序来判断小明对他的每个程序给出的时间复杂度是 否正确。A++语言的循环结构如下:F i x y    循环体E其中“F i x y”表示新建变量 (i变量 i 不可与未被销毁的变量重名)并初始化为 x,然后判断 i 和 y 的大小关系,若 i 小于等于 y 则进入循环,否则不进入。每次循环结束 后 i 都会被修改成 i +1,一旦 i 大于 y 终止循环。x 和 y 可以是正整数(x 和 y 的大小关系不定)或变量 n。n 是一个表示数据规模的 变量,在时间复杂度计算中需保留该变量而不能 将其视为常数,该数远大于 100。“E”表示循环体结束。循环体结束时,这个循环体新建的变量也被销毁。 注:本题中为了书写方便,在描述复杂度时,使用大写英文字母“O”表示通常意义下“Θ”的概念。
输入输出格式输入格式输入第一行一个正整数 t,表示有 t(t ≤ 10)个程序需要计算时间复杂度。 每个程序我们只需抽取其中 “F i x y”和“E”即可计算时间复杂度。注意:循环结构允许嵌套。接下来每个程序的第一行包含一个正整数 L 和一个字符串,L 代表程序行数,字符串表示这个程序的复杂度,“O(1)”表示常数复杂度,“O(n^w)”表示复杂度为nw,其 中 w是一个小于 100 的正整数(输入中不包含引号),输入保证复杂度只有 O(1)和 O(n^w)两种类型。接下来 L 行代表程序中循环结构中的“F i x y”或者 “E”。 程序行若以“F”开头,表示进入一个循环,之后有空格分离的三个字符(串)i x y,其中 i 是一个小写字母(保证不为“n”),表示新建的变量名,x 和 y 可能是正整数或n ,已知若为正整数则一定小于 100。  程序行若以“E”开头,则表示循环体结束。输出格式输出共 t 行,对应输入的 t 个程序,每行输出“Yes”或“No”或者“ERR”(输 出中不包含引号),若程序实际复杂度与输入给出的复杂度 一致则输出“Yes”,不一致 则输出“No”,若程序有语法错误(其中语法错误只有: ① F 和 E 不匹配 ②新建的变 量与已经存在但未被销毁的变量重复两种情况),则输出“ERR”。注意:即使在程序不会执行的循环体中出现了语法错误也会编译错误, 要输出 “ERR”。
输入输出样例输入样例#1:82 O(1)F i 1 1 E2 O(n^1)F x 1 n E1 O(1)F x 1 n 4 O(n^2)F x 5 n F y 10 n EE4 O(n^2)F x 9 n EF y 2 n E4 O(n^1)F x 9 n F y n 4 EE4 O(1)F y n 4 F x 9 n EE4 O(n^2)F x 1 n F x 1 10 EE输出样例#1:YesYesERRYesNoYesYesERR输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>#define ll long long#define rint register intusing namespace std;stack<int> zhan;int main(){    int t;scanf("%d",&t);    while(t--){        int n;scanf("%d",&n);    	int nowline=0,pos=0;    	int Fcnt=0,Ecnt=0,cnt=0;        int hisans=0,myans=0;        int runflag=-1;    	bool endflag=false;        string tmp;cin>>tmp;        string sublist="0";        for(rint i=0;i<tmp.length();++i)            if(tmp[i]>='0'&&tmp[i]<='9'){                hisans+=tmp[i]-'0';                hisans*=10;            }        hisans/=10;        if(tmp[2]=='1') hisans=0;        for(rint i=1;i<=n;++i){            string sub,opt,tmpsta,tmpend;            int sta=0,end=0;            cin>>opt;            if(opt=="F"){            	++Fcnt;++pos;                zhan.push(pos);                cin>>sub>>tmpsta>>tmpend;                if(tmpend[0]=='n'&& (!(tmpsta[0]=='n'&&tmpend[0]=='n'))) ++cnt;                for(rint j=0;j<tmpsta.length();++j){                    sta+=tmpsta[j]-'0';                    sta*=10;                }                sta/=10;                if(tmpend[0]!='n'){//如果end是数字                     for(rint i=0;i<tmpend.length();++i){                        end+=tmpend[i]-'0';                        end*=10;                    }                    end/=10;                    if(sta>end)//如果循环不能执行                         runflag=pos;                }                if(runflag==-1||pos<runflag) myans=max(myans,cnt);                sublist+=sub;                if(sublist.find(sub)!=sublist.length()-1){                	printf("ERR\n");cnt=0;nowline=i;endflag=true;break;                }                sta=0;end=0;            }            else if(opt=="E"){            	--cnt;++Ecnt;                if(zhan.empty()&&!endflag){            		printf("ERR\n");cnt=0;nowline=i;endflag=true;break;                }                if(zhan.top()<=runflag){                	pos=0;                	runflag=-1;                }                if(!zhan.empty()) zhan.pop();                if(sublist.length()>0) sublist=sublist.substr(0,sublist.length()-1);            	if(zhan.empty()) cnt=0;            }        }        if(endflag){        	cnt=0;        	while(!zhan.empty())        		zhan.pop();        		string cnm;        	for(rint i=1;i<=n-nowline+1;++i) getline(cin,cnm);        	continue;        }        if(Fcnt!=Ecnt){        	if(!endflag) printf("ERR\n");        	while(!zhan.empty()) zhan.pop();        	cnt=0;        	continue;        }        while(!zhan.empty()) zhan.pop();         if(!endflag){        	if(myans==hisans) printf("Yes\n");        	else printf("No\n");        }        myans=hisans=0;    }    return 0;}
  1. 珠心算测验
题目描述珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中 的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 最近老师出了一些测验题,请你帮 忙求出答案。
输入输出格式输入格式输入文件quiz.in 输入共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。说明: 3 ≤ n ≤ 100,测验题给出的正整数大小不超过10000。输出格式输出文件quiz.out 输出共一行,包含一个整数,表示测验题答案。
输入输出样例输入样例#1:41 2 3 4输出样例#1:2输入样例#2:51 9 3 7 10输出样例#2:1输入样例#3:输出样例#3:
  1. 七龙珠
题目描述传说“集齐七颗龙珠,可以召唤神龙”。这七个不同龙珠星级分别为1,2,3,4,5,6,7.现在,你面前有一排n个龙珠,第i颗龙珠的星级是xi。每颗龙珠卖1万,并且只能买连续的若干颗,不能挑挑拣拣。请问至少要万才能召唤神龙?注意:星级为8或以上的龙珠没用。
输入输出格式输入格式输入第一行为正整数n,第二行共n个正整数xi,在1到9之间。n<=100。输出格式输出一个正整数代表最小费用,若无法召唤输出bye dragon
输入输出样例输入样例#1:121 2 2 3 4 5 6 8 9 7 1 8输出样例#1:9输入样例#2:67 6 5 4 3 2输出样例#2:bye dragon输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;const int N=109;int n,x[N];bool OK(int len){	int cnt[10]={};	int sum=0;	for(int i=1;i<=len;++i){		cnt[x[i]]++;		if(x[i]<=7&&cnt[x[i]]==1)sum++;	}	if(sum==7)return 1;	for(int i=len+1;i<+n;++i){		cnt[x[i]]++;		if(x[i]<=7&&cnt[x[i]]==1)sum++;		cnt[x[i-len]]--;		if(x[i-len]<=7&&cnt[x[i-len]]==0)sum--;		if(sum==7)return 1;	}	return 0;}int main(){	cin>>n;	for(int i=1;i<=n;i++)cin>>x[i];	int l=7;	int r=n;	int ans=n+1;	while(l<=r){		int mid=l+(r-l)/2;		if(OK(mid))ans=mid,r=mid-1;		else l=mid+1;	}	if(ans==n+1)	    cout<<"bye dragon";	else	    cout<<ans;	return 0; }
  1. 免费旅游1
题目描述有一艘国际邮轮在世界各国穿梭n个星期,他每个星期会停靠一个国家,第i个星期所在国家的编号为xi。邮轮在招聘清洁工,虽然没有工资,但可以免费去各国旅游,你非常心动。如果你想至少玩k个不同国家,那么至少在船上连续打工几个星期?假设你可以选择任意一段连续的工作时间。
输入输出格式输入格式输入第一行为正整数n和k,第二行共n个正整数xi,在1到200之间。n<=1000。输出格式输出一个正整数代表最小星期数,若无法玩到k个国家输出impossible
输入输出样例输入样例#1:5 37 6 7 7 8输出样例#1:4输入样例#2:无输出样例#2:无输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;int x[1009];int n,k,l,r,ans;int cnt[209];int sum;int main(){	cin>>n>>k;	for(int i=0;i<n;i++)cin>>x[i];	ans=n+1;	while(1){		while(r<n&&sum<k){			int num=x[r++];			cnt[num]++;			if(cnt[num]==1)sum++;		}		if(sum<k)break;		ans=min(ans,r-l);		int num=x[l++];		cnt[num]--;		if(cnt[num]==0)sum--;	}	if(ans==n+1)cout<<"impossible";	else cout<<ans;	return 0;}
  1. 免费旅游2
题目描述有一艘国际邮轮在世界各国穿梭n个星期,他每个星期会停靠一个国家, 第i个星期所在国家的编号为xi。邮轮在招聘清洁工,虽然没有工资,但 可以免费去各国旅游,你非常心动。如果你想玩遍所有该邮轮到达的国家,那么至少在船上连续打工几个星期?假设你可以选择任意一段连续的工作星期。
输入输出格式输入格式输入第一行为正整数n,第二行共n个正整数xi,在1到200之间。n<=1000 。输出格式输出一个正整数代表最小星期数。
输入输出样例输入样例#1:56 7 8 8 7输出样例#1:3输入样例#2:41 2 3 4输出样例#2:4输入样例#3:无输出样例#3:无
#include<bits/stdc++.h>using namespace std;int x[1009];int n,k,l,r,ans;int cnt[209];set<int> jihe;int sum;int main(){	cin>>n;	for(int i=0;i<n;i++){		cin>>x[i];		jihe.insert(x[i]);	}	k=jihe.size();	ans=n+1;	while(1){		while(r<n&&sum<k){			int num=x[r++];			cnt[num]++;			if(cnt[num]==1)sum++;		}		if(sum<k)break;		ans=min(ans,r-l);		int num=x[l++];		cnt[num]--;		if(cnt[num]==0)sum--;	}	if(ans==n+1)cout<<"impossible";	else cout<<ans;	return 0;}
posted @ 2022-04-18 08:24 WindowsRegedit 阅读(21) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员