本地小黑板,学习不迷路

禁鼠标点击
禁复制
禁剪切
禁粘贴

使用快捷键 ctrl+f ,然后搜索“题目名”,可以快速找到你需要的题目

#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(j==1 || j==n){ //第1列和第n列 
				cout<<'|';
			}else if(i==1 || i==(n+1)/2 || i==n){//第1行,中间行,第n行 
				cout<<'-';
			}else{ //其余位置 
				cout<<'x';
			}
		}
		cout<<endl;
	} 
	return 0;
}
/*	Problem: ⼩杨的⽇字矩阵
	Language: C++	Result: 正确 	Time: 2026-07-14 20:15:30
	User: admin  	Problem: 4045	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,c,ans=0,bb,cc;//bb表示瓶盖数量,cc表示空瓶数量 
int main(){
	cin>>a>>b>>c;
	ans+=a; //先喝掉a瓶水
	bb=a; cc=a; //剩下的瓶盖和空瓶子
	while(bb>=b || cc>=c){ //瓶盖 或 空瓶子 都可以换 
		if(bb>=b){ //瓶盖够换 
			ans+=bb/b;    //喝水
			cc+=bb/b;     //空瓶子数量更新
			bb=bb/b+bb%b; //瓶盖数量更新 
		} 
		
		if(cc>=c){ //空瓶子够换
			ans+=cc/c;    //喝水
			bb+=cc/c;     //瓶盖数量更新
			cc=cc/c+cc%c; //空瓶子数量更新
		} 
	} 
	cout<<ans;
	return 0;
}
/*	Problem: 汽水兑奖.
	Language: C++	Result: 正确 	Time: 2026-07-14 19:46:57
	User: admin  	Problem: 2009	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	int q=n%10;
	int b=n/10%10;
	int s=n/100%10;
	int g=n/1000%10; 
	cout<<9-q<<9-b<<9-s<<9-g;
	return 0;
}
/*	Problem: 数字加密.
	Language: C++	Result: 正确 	Time: 2026-07-14 19:36:10
	User: admin  	Problem: 1963	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,x,y,ans=0;
int main(){
	cin>>a>>b>>x>>y;
	if(a<=b&&x<=y){ //永远不能超过 
		cout<<"Impossible"; 
	}else{
		while(a<=b){ //未超过,继续追 
			ans++; //一天过去了
			a+=x;  
			b+=y; 
		}
		cout<<ans; 
	}
	return 0;
}
/*	Problem: 刷题竞赛.
	Language: C++	Result: 正确 	Time: 2026-07-14 19:16:02
	User: admin  	Problem: 1954	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=0;i<=n/2;i++){ //枚举自行车的数量 
		int j=(n-2*i)/3; //计算出三轮车的数量
		if(2*i+3*j==n){ //轮子数量刚刚好 
			cout<<i<<" "<<j<<endl; 
		} 
	} 
	return 0;
}
/*	Problem: 两轮车和三轮车.
	Language: C++	Result: 正确 	Time: 2026-07-14 19:08:48
	User: admin  	Problem: 1232	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=2*n+1;i++){ //有2*n+1行 
		for(int j=1;j<=2*n-1;j++){ //只考虑2*n-1列 
			if(i==1 || i==n+1 || i==2*n+1) cout<<'*';
			else if(j==1) cout<<'*';
			else if(j==2*n-1) cout<<" *"; //空格+星号
			else cout<<' '; 
		} 
		cout<<endl; //换行 
	}
	return 0;
}
/*	Problem: 打印B图案.
	Language: C++	Result: 正确 	Time: 2026-07-14 19:03:59
	User: admin  	Problem: 1940	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	while(n!=495){ //就需要打乱n,用最大的-最小的 
		int g=n%10,s=n/10%10,b=n/100%10;
		int mx=max(b*100+s*10+g,b*100+g*10+s); //最大值 
		mx=max(mx,max(s*100+b*10+g,s*100+g*10+b));
		mx=max(mx,max(g*100+b*10+s,g*100+s*10+b));
		
		int mn=min(b*100+s*10+g,b*100+g*10+s); //最小值 
		mn=min(mn,min(s*100+b*10+g,s*100+g*10+b));
		mn=min(mn,min(g*100+b*10+s,g*100+s*10+b));
		
		n=mx-mn; //最大值-最小值
		ans++;   //每次变化一轮,+1 
	} 
	cout<<ans; 
	return 0;
}

/*	Problem: 数字黑洞
	Language: C++	Result: 正确 	Time: 2026-07-13 20:16:04
	User: admin  	Problem: 4023	contest_id: 0*/
#include<iostream>
using namespace std;
int T,n;
int main(){
	cin>>T;
	while(T--){ //T个用例 
		cin>>n;
		int m=n,w=0; //临时变量m,w表示n的位数 
		while(m){ //m数位分离,计算n的位数 
			w++; //位数+1
			m/=10; //m抹掉个位 
		} 
		int k=n,ans=0; //临时变量k,ans表示连乘的结果
		while(k){ //数位分离,提取n的每一位 
			int g=k%10,ji=1;
			for(int i=1;i<=w;i++) ji*=g; //变量g连乘w次
			k/=10; 
			ans+=ji; //各位的w次方要累加起来 
		} 
		if(ans==n) cout<<"T"<<endl;
		else cout<<"F"<<endl; 
	}
	return 0;
}
/*
假设输入的n是w位数字,那么就将n的每一位连乘w次,且累加起来的和正好是n,则是自幂数 
*/

/*	Problem: 自幂数判断.
	Language: C++	Result: 正确 	Time: 2026-07-13 19:23:38
	User: admin  	Problem: 4036	contest_id: 0*/
#include<iostream> //枚举因数的范围可以为2~i-1,这样因子数0个的是质数 
using namespace std;
int a,b,ans=0;
int main(){
	cin>>a>>b;
	for(int i=a;i<=b;i++){ //枚举a~b中间的每一个数字i 
		int cnt=0; //cnt表示i的因数个数
		for(int j=2;j<=i-1;j++){ //枚举j:2~i-1
			if(i%j==0) cnt++; //j是i的因子,数量+1 
		} 
		if(cnt==0) ans++; //因子数为0,则是质数 
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 找素数.
	Language: C++	Result: 正确 	Time: 2026-07-13 19:14:21
	User: admin  	Problem: 4024	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,ans=0;
int main(){
	cin>>a>>b;
	for(int i=a;i<=b;i++){ //枚举a~b中间的每一个数字i 
		int cnt=0; //cnt表示i的因数个数
		for(int j=1;j<=i;j++){ //枚举i所有可能的因数j:1~i 
			if(i%j==0) cnt++; //j是i的因子,数量+1 
		} 
		if(cnt==2) ans++; //因子数为2,则是质数 
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 找素数.
	Language: C++	Result: 正确 	Time: 2026-07-13 19:12:25
	User: admin  	Problem: 4024	contest_id: 0*/
#include<iostream>
using namespace std;
int n,x,y,ans=0;
int main(){
	cin>>n>>x>>y; 
	for(int i=1;i<=n/x;i++){
		for(int j=1;j<=n/y;j++){ 
			if(i+j>50 && i*x+j*y==n){
				cout<<i<<" "<<j<<endl;
			} 
		} 
	}
	return 0;
}
/*	Problem: 开学采购
	Language: C++	Result: 正确 	Time: 2026-07-13 19:07:57
	User: admin  	Problem: 3229	contest_id: 0*/
#include<iostream>
using namespace std;
int n,x,y,ans=0;
int main(){
	cin>>n>>x>>y; 
	for(int i=1;i<=n/x;i++){ //枚举霸王龙的数量 
		for(int j=1;j<=i;j++){ //枚举三角龙的数量,三角龙<=霸王龙 
			if(i+j>=5 && i*x+j*y==n){//总数要在5个或者5个以上,而且不能有钱剩下
				cout<<i<<" "<<j<<endl;
			} 
		} 
	}
	return 0;
}
/*	Problem: 恐龙园买玩具
	Language: C++	Result: 正确 	Time: 2026-07-13 19:00:57
	User: admin  	Problem: 3227	contest_id: 0*/
#include<iostream>
using namespace std;
int x,n,ans=0;
int main(){
	cin>>x>>n;
	for(int i=1;i<=n;i++){ //循环n次 
		if(x%7==6 || x%7==0){
			//周末不游泳 
		}else{
			ans+=250; //一天游泳250公里 
		} 
		x++; //时间+1天 
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 小鱼的航程
	Language: C++	Result: 正确 	Time: 2026-07-13 18:55:33
	User: admin  	Problem: 3301	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x=i,d=1; //第i行的初始值是i 
		for(int j=1;j<=n;j++){
			printf("%3d",x); 
			if(x==n) d=-1;
			x+=d; //相邻两个数字差d 
		}
		cout<<endl;
	} 
	return 0;
}
/*	Problem: 斜角II
	Language: C++	Result: 正确 	Time: 2026-07-13 18:48:03
	User: admin  	Problem: 3097	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x=i; //第i行的初始值是i 
		for(int j=1;j<=n;j++){
			printf("%3d",x); 
			x++; //相邻两个数字差1 
		}
		cout<<endl;
	} 
	return 0;
}
/*	Problem: 斜角I
	Language: C++	Result: 正确 	Time: 2026-07-13 18:46:51
	User: admin  	Problem: 3096	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i+j==n+1) printf("%3d",1); //反对角线,行号+列号==n+1 
			else printf("%3d",0);
		}
		cout<<endl;
	} 
	return 0;
}
/*	Problem: 对角线II
	Language: C++	Result: 正确 	Time: 2026-07-13 18:45:18
	User: admin  	Problem: 3095	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j) printf("%3d",1); //对角线,行号==列号 
			else printf("%3d",0);
		}
		cout<<endl;
	} 
	return 0;
}
/*	Problem: 对角线I
	Language: C++	Result: 正确 	Time: 2026-07-13 18:43:18
	User: admin  	Problem: 3094	contest_id: 0*/
#include<iostream>
using namespace std;
int ans=0;
double n,d=2; //刚开始第一次可以有2米 
int main(){
	cin>>n;
	while(n>0){
		ans++; //换气一次
		n-=d;  //游出d米
		d*=0.98; //更新d,为下一轮使用d做准备 
	} 
	cout<<ans; 
	return 0;
}

/*	Problem: 学游泳
	Language: C++	Result: 正确 	Time: 2026-07-12 20:38:39
	User: admin  	Problem: 3293	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	n*=10; //元变成角
	for(int i=1;i<=n/8;i++){ //枚举圆珠笔的数量
		for(int j=1;j<=n/2;j++){ //枚举铅笔的数量 
			int k=n-i*8-j*2;  //铅笔芯的数量
			if(k>0&&i+j+k>30){ //铅笔芯至少1个,且三种物品总个数>30 
				ans++; //满足所有条件,方案数+1 
			} 
		} 
	} 
	cout<<ans; 
	return 0;
}
/*	Problem: 购买文具
	Language: C++	Result: 正确 	Time: 2026-07-12 20:32:04
	User: admin  	Problem: 3027	contest_id: 0*/
#include<iostream>
using namespace std;
int ans=0;
int main(){
	for(int i=1;i<=20;i++){ //枚举5元的张数
		for(int j=1;j<=100;j++){ //枚举1元的张数 
			int k=100-i*5-j; //计算0.5元的总钱数
			if(k>0&&2*k+j+i==100){ //总张数为100,且k>0 
				//cout<<i<<" "<<j<<" "<<2*k<<endl; //输出可行方案 
				ans++; //方案数+1 
			} 
		} 
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 换零钱1
	Language: C++	Result: 正确 	Time: 2026-07-12 20:24:49
	User: admin  	Problem: 3782	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=n;i>=1;i--){
		cout<<"**";
		for(int j=1;j<=i;j++) cout<<' ';  //i列,有i个空格
		for(int j=1;j<=i;j++) cout<<'*';  //i列,有i个*
		cout<<endl; 
	} 
	cout<<"***"<<endl; //中间3个*
	for(int i=1;i<=n;i++){
		cout<<"**";
		for(int j=1;j<=i;j++) cout<<' ';  //i列,有i个空格
		for(int j=1;j<=i;j++) cout<<'*';  //i列,有i个*
		cout<<endl; 
	}  
	return 0;
}
/*	Problem: 打印K型.
	Language: C++	Result: 正确 	Time: 2026-07-12 20:07:13
	User: admin  	Problem: 1979	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){//规则1
			if(j==1 || j==n){
				cout<<"|";
			}else if(i==(n+1)/2){//规则2
				cout<<"-";
			}else{
				cout<<"a";
			}
		} 
		cout<<endl; //每行结束,记得换行 
	}
	return 0;
}
/*
n行n列
规则1 第1列和第n列都是 | 
规则2 除了规则1之外,中间行 (n+1)/2 行 都是 -
规则3 除了规则1和规则2之外,都是字符a 
*/

/*	Problem: ⼩杨的 H 字矩阵.
	Language: C++	Result: 正确 	Time: 2026-07-12 19:59:57
	User: admin  	Problem: 4047	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,m,n,ans=0;
int main(){
	cin>>a>>b>>m>>n;
	ans+=a+b; //第1天和第2天的题目 
	for(int i=3;i<=n;i++){ //3~n天 
		int t=a+b;
		ans+=t; //第i天的题目
		if(t>=m) break;
		a=b; //为下一轮的i准备:更新第i-2天 
		b=t; //为下一轮的i准备:更新第i-1天 
	} 
	cout<<ans;
	return 0;
}
/*	Problem: 小杨做题.
	Language: C++	Result: 正确 	Time: 2026-07-12 19:50:26
	User: admin  	Problem: 4046	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x=i,d=0;
		for(int j=1;j<=n;j++){
			printf("%3d",x);
			if(i+j==n+1) d=-1;  //反对角线以后,d为-1 
			x+=d; //为下一轮准备 
		} 
		cout<<endl;
	} 
	return 0;
}
/*	Problem: 拐角V
	Language: C++	Result: 正确 	Time: 2026-07-12 19:36:52
	User: admin  	Problem: 3113	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x=i,d=0;
		for(int j=1;j<=n;j++){
			printf("%3d",x);
			if(i==j) d=1; 
			x+=d; //为下一轮准备 
		} 
		cout<<endl;
	} 
	return 0;
}

/*	Problem: 拐角IV
	Language: C++	Result: 正确 	Time: 2026-07-12 19:33:09
	User: admin  	Problem: 3112	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x=n,d=-1;
		for(int j=1;j<=n;j++){
			printf("%3d",x);
			if(i==j) d=0; 
			x+=d; //为下一轮准备 
		} 
		cout<<endl;
	} 
	return 0;
}
/*	Problem: 拐角III
	Language: C++	Result: 正确 	Time: 2026-07-12 19:29:21
	User: admin  	Problem: 3102	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){//1~n行
		int x=n-i+1,d=0; //x表示第i行的初始值,d表示第i行的变化值
		for(int j=1;j<=n;j++){
			printf("%3d",x);
			if(j==i) d=-1; //列号和行号相等时,d变成-1 
			x+=d; //+d,为下一列准备 
		} 
		cout<<endl;
	} 
	return 0;
}
/*	Problem: 拐角II
	Language: C++	Result: 正确 	Time: 2026-07-12 19:22:55
	User: admin  	Problem: 3101	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){//1~n行
		int x=1,d=1; //x表示第i行的初始值,d表示第i行的变化值
		for(int j=1;j<=n;j++){
			printf("%3d",x);
			if(x==i) d=0; //当第j列的值变成i时,d变成0 
			x+=d; //+d,为下一列准备 
		} 
		cout<<endl;
	} 
	return 0;
}
/*
1 确定行号:1~n 
2 确定每一行的开头:第i行以1开头 
3 确定相邻两列的变化规律:d初始为1,当第j列的值变成i时,d变成0 
*/
/*	Problem: 拐角I
	Language: C++	Result: 正确 	Time: 2026-07-12 19:15:45
	User: admin  	Problem: 3100	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int main(){
	cin>>n;
	for(int i=n;i>=1;i--){//看成n~1行
		int x=i,d=1; //x表示第i行的初始值,d表示第i行的变化值
		for(int j=1;j<=n;j++){
			printf("%3d",x);
			if(x==n) d=-1; //d初始为1,遇到n变成-1
			x+=d; //+d,为下一列准备 
		} 
		cout<<endl;
	} 
	return 0;
}
/*
n行(看成n~1行)n列,每一行都有n列:
第i行以i开头 
初始时,第j+1列比第j列+1,如果遇到了n,第j+1列比第j列-1 .
所以,用一个变量d纪录这个变化值,第j+1列比第j列+d。d初始为1,遇到n变成-1 
*/
/*	Problem: 斜角IV
	Language: C++	Result: 正确 	Time: 2026-07-12 19:07:02
	User: admin  	Problem: 3099	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){//i表示1~n行 
		char c='A'+i-1;  //第i行的开头 
		for(int j=1;j<=n;j++){ //每一行都有n列,也就是第i行都是n列 
			printf("%3c",c); 
			c++;  //+1,为下一列准备 
			if(c=='A'+n) c='A'; //超过输出范围,改回'A' 
		} 
		printf("\n"); //内层循环结束后,换行 
	} 
	return 0;
}
/*
n行n列,每一行都有n列:
第1行 A开头
第2行 B开头
..
第n行 char('A'+n-1) 开头   总结:第i行应该以 char('A'+i-1)开头 

第j+1列比第j列 +1 ,如果第j列已经到了 最后一个字母,应该重新从'A'开始 
*/

/*	Problem: 斜角III
	Language: C++	Result: 正确 	Time: 2026-07-12 18:55:14
	User: admin  	Problem: 3098	contest_id: 0*/
#include<iostream>
using namespace std;
int x,n=0,ans=0;
int main(){
	while(cin>>x){ //在循环条件中,进行输入,表示无限输入 
		n++; //个数+1
		ans+=x; //求和 
	}
	cout<<n<<" "<<ans; 
	return 0;
}
/*
注意:这种循环输入需要按ctrl+z,然后回车,才能结束循环 
*/
/*	Problem: 钱币
	Language: C++	Result: 正确 	Time: 2026-07-11 20:00:41
	User: admin  	Problem: 3700	contest_id: 0*/
#include<iostream>
using namespace std;
long long t,n,a[100010],f[100010];//f[i]表示1~i的奶酪的美味度之和最大值
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++) cin>>a[i];
		f[1]=max(a[1],0ll); //状态初始值
		for(int i=2;i<=n;i++){
			f[i]=max(f[i-1],f[i-2]+a[i]); //两种情况取最大值:第i个奶酪 吃 或 不吃 
		}
		cout<<f[n]<<endl; 
	}
	return 0;
}
/*	Problem: 吃奶酪
	Language: C++	Result: 正确 	Time: 2026-07-11 17:08:22
	User: admin  	Problem: 2302	contest_id: 0*/
#include<iostream>
using namespace std;
int n,m,a[1000010],b[1000010],ans=0;//a原始数组,b差分数组 
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		b[x]++;
		b[y+1]--;
	} 
	
	for(int i=1;i<=n;i++){ //计算b的前缀和a 
		a[i]=a[i-1]+b[i];
		if(a[i]%2){ //被翻面次数为奇数,则是正面 
			ans++;
		} 
	}
	cout<<ans; 
	return 0;
}

/*	Problem: 小 X 与煎饼达人
	Language: C++	Result: 正确 	Time: 2026-07-11 16:36:43
	User: admin  	Problem: 1464	contest_id: 0*/
#include<iostream>
using namespace std;
int n,k,a[100010],b[100010];//b是a的差分数组 
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i]-a[i-1]; //计算差分数组b 
	} 
	for(int i=1;i<=k;i++){ //k轮区间修改 
		int l,r,x;
		cin>>l>>r>>x;
		b[l]+=x;
		b[r+1]-=x; 
	}
	for(int i=1;i<=n;i++){ //计算b的前缀和 
		a[i]=a[i-1]+b[i];  //b的前缀和 
		cout<<a[i]<<" "; 
	}
	return 0;
}
/*差分:解决区间修改的问题 
*/

/*	Problem: 倒水
	Language: C++	Result: 正确 	Time: 2026-07-11 16:25:08
	User: admin  	Problem: 1276	contest_id: 0*/
#include<iostream>
#include<queue> 
using namespace std;
int n,ans=0;
deque<int> q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int ty,x;
		cin>>ty>>x;
		if(ty==1){ //入队 
			q.push_back(x);  //从队尾入队 
		}else{     //出队 
			if(x==0) q.pop_front(); //从队头出
			else q.pop_back();      //从队尾出 
		}
	}
	if(q.empty()) cout<<"NULL";
	while(q.size()){
		cout<<q.front()<<" "; //获得队头 
		q.pop_front();   //队头出队 
	} 
	return 0;
}
/*	Problem: 双端队列
	Language: C++	Result: 正确 	Time: 2026-07-11 15:51:13
	User: admin  	Problem: 2412	contest_id: 0*/
#include<iostream>
using namespace std;
string s1; 
int n,a[100010],b,c[100010];//a被除数,b除数,c商 
int main(){
	cin>>s1>>b;
	for(int i=s1.size()-1,j=1;i>=0;i--,j++) a[j]=s1[i]-'0'; //字符转数字,从低位到高位逐位存储 
	
	int len=s1.size(); 
	int x=0; //用于拼接每一次做除法的被除数 
	for(int i=len;i>=1;i--){ //从前往后遍历被除数 
		x=x*10+a[i]; //拼接被除数
		c[i]=x/b;    //上商,x<b商为0,否则商为x/b
		x%=b;        //商后的余数 
	} 
	
	while(c[len]==0&&len>1) len--;
	for(int i=len;i>=1;i--) cout<<c[i];
	return 0;
}
/*	Problem: 高精度除以低精
	Language: C++	Result: 正确 	Time: 2026-07-11 15:39:08
	User: admin  	Problem: 1215	contest_id: 0*/
#include<iostream>
using namespace std;
int c[1010];
void f(int a[],int b[]){ //a被减数,b减数,0下标分别存储数字长度
	int len=a[0]; //被减数的长度 
	for(int i=1;i<=len;i++){
		c[i]=a[i]-b[i];
		if(c[i]<0){ //需要借位 
			a[i+1]--;
			c[i]+=10; 
		}
	} 
	while(c[len]==0&&len>1) len--;
	for(int i=len;i>=1;i--) cout<<c[i];
} 
string s1,s2; 
int a[1010],b[1010];
int main(){
	cin>>s1>>s2;
	a[0]=s1.size();b[0]=s2.size();
	for(int i=a[0]-1,j=1;i>=0;i--,j++) a[j]=s1[i]-'0'; //字符转数字,从低位到高位逐位存储 
	for(int i=b[0]-1,j=1;i>=0;i--,j++) b[j]=s2[i]-'0'; //字符转数字,从低位到高位逐位存储 
	if(b[0]>a[0]){ //减数更长,则更大 
		cout<<"-", f(b,a); 
	}else if(b[0]==a[0]){ //长度一样 
		if(s1>s2) f(a,b);
		else if(s1==s2) cout<<0;
		else cout<<"-", f(b,a); 
	}else{
		f(a,b);
	} 
	return 0;
}
/*	Problem: 高精减A-B
	Language: C++	Result: 正确 	Time: 2026-07-11 15:16:28
	User: admin  	Problem: 1210	contest_id: 0*/
#include<iostream>
using namespace std;
string s1,s2; 
int n,a[100010],b[100010],c[100010];
int main(){
	cin>>s1>>s2;
	for(int i=s1.size()-1,j=1;i>=0;i--,j++) a[j]=s1[i]-'0'; //字符转数字,从低位到高位逐位存储 
	for(int i=s2.size()-1,j=1;i>=0;i--,j++) b[j]=s2[i]-'0'; //字符转数字,从低位到高位逐位存储 
	
	int len1=s1.size(),len2=s2.size(); 
	for(int i=1;i<=len1;i++){ //从低位到高位,遍历a的每一位 
		for(int j=1;j<=len2;j++){ //从低位到高位,遍历b的每一位 
			c[i+j-1]+=a[i]*b[j];
		} 
	} 
	
	for(int i=1;i<=10010;i++){ //从低位到高位,进位 
		c[i+1]+=c[i]/10;  //进位 
		c[i]%=10;         //留下最低位 
	}
	
	int len=10010;
	while(c[len]==0&&len>1) len--; //去掉前导0
	for(int i=len;i>=1;i--) cout<<c[i]; 
	return 0;
}
/*
1 用字符串读入,然后倒序存储到数组中
2 数组从前往后,逐位相加,并进位 
*/
/*	Problem: 高精乘低精A×B
	Language: C++	Result: 正确 	Time: 2026-07-11 14:48:04
	User: admin  	Problem: 1211	contest_id: 0*/
#include<iostream>
using namespace std;
string s1,s2; 
int n,a[100010],b[100010],c[100010];
int main(){
	cin>>s1>>s2;
	for(int i=s1.size()-1,j=1;i>=0;i--,j++) a[j]=s1[i]-'0'; //字符转数字,从低位到高位逐位存储 
	for(int i=s2.size()-1,j=1;i>=0;i--,j++) b[j]=s2[i]-'0'; //字符转数字,从低位到高位逐位存储 
	
	int len1=s1.size(),len2=s2.size(); 
	for(int i=1;i<=len1;i++){ //从低位到高位,遍历a的每一位 
		for(int j=1;j<=len2;j++){ //从低位到高位,遍历b的每一位 
			c[i+j-1]+=a[i]*b[j];
		} 
	} 
	
	for(int i=1;i<=10010;i++){ //从低位到高位,进位 
		c[i+1]+=c[i]/10;  //进位 
		c[i]%=10;         //留下最低位 
	}
	
	int len=10010;
	while(c[len]==0&&len>1) len--; //去掉前导0
	for(int i=len;i>=1;i--) cout<<c[i]; 
	return 0;
}
/*
1 用字符串读入,然后倒序存储到数组中
2 数组从前往后,逐位相加,并进位 
*/
/*	Problem: 高精乘高精A×B
	Language: C++	Result: 正确 	Time: 2026-07-11 14:46:20
	User: admin  	Problem: 1212	contest_id: 0*/
#include<iostream>
using namespace std;
string s1,s2; 
int n,a[1010],b[1010],c[1010];
int main(){
	cin>>s1>>s2;
	for(int i=s1.size()-1,j=1;i>=0;i--,j++) a[j]=s1[i]-'0'; //字符转数字,从低位到高位逐位存储 
	for(int i=s2.size()-1,j=1;i>=0;i--,j++) b[j]=s2[i]-'0'; //字符转数字,从低位到高位逐位存储 
	for(int i=1;i<=max(s1.size(),s2.size());i++){ //模拟竖式加法,从低位到高位 
		c[i]+=a[i]+b[i];  //注意
		
		c[i+1]+=c[i]/10; //进位
		c[i]%=10;        //进位后,当前为只留下个位 
	} 
	int len=201;
	while(c[len]==0&&len>1) len--; //去掉前导0 
	for(int i=len;i>=1;i--) cout<<c[i]; 
	return 0;
}
/*
1 用字符串读入,然后倒序存储到数组中
2 数组从前往后,逐位相加,并进位 
*/
/*	Problem: 高精和A+B
	Language: C++	Result: 正确 	Time: 2026-07-11 14:18:44
	User: admin  	Problem: 1209	contest_id: 0*/
#include<iostream>
using namespace std;
string s1,s2; 
int n,a[1010],b[1010],c[1010];
int main(){
	cin>>s1>>s2;
	for(int i=s1.size()-1,j=1;i>=0;i--,j++) a[j]=s1[i]-'0'; //字符转数字,从低位到高位逐位存储 
	for(int i=s2.size()-1,j=1;i>=0;i--,j++) b[j]=s2[i]-'0'; //字符转数字,从低位到高位逐位存储 
	for(int i=1;i<=max(s1.size(),s2.size());i++){ //模拟竖式加法,从低位到高位 
		c[i]+=a[i]+b[i];  //注意
		
		c[i+1]+=c[i]/10; //进位
		c[i]%=10;        //进位后,当前为只留下个位 
	} 
	int len=201;
	while(c[len]==0) len--; //去掉前导0 
	for(int i=len;i>=1;i--) cout<<c[i]; 
	return 0;
}
/*
1 用字符串读入,然后倒序存储到数组中
2 数组从前往后,逐位相加,并进位 
*/
/*	Problem: 高精和A+B
	Language: C++	Result: 正确 	Time: 2026-07-11 14:17:43
	User: admin  	Problem: 1209	contest_id: 0*/
#include<iostream>
#include<iomanip> 
using namespace std;
double x,ans=0;
int main(){
	for(int i=1;i<=12;i++){
		cin>>x; //第i个月的工资收入
		if(x>800){ //不超过800是不用交税的 
			ans+=(x-800)*0.2; 
		} 
	}
	cout<<setprecision(2)<<fixed<<ans;
	return 0;
}
/*	Problem: 交税
	Language: C++	Result: 正确 	Time: 2026-07-10 20:29:26
	User: admin  	Problem: 4888	contest_id: 0*/
#include<iostream> //解法3
using namespace std;
int ab,ac,cb1,cb2;
int main(){
	cin>>ab>>ac>>cb1>>cb2;
	//三个数字里面取最小值
	cout<<min(ab,min(ac+cb1,ac+cb2));
	return 0;
}
/*	Problem: 去旅行
	Language: C++	Result: 正确 	Time: 2026-07-10 20:21:31
	User: admin  	Problem: 4887	contest_id: 0*/
#include<iostream> //解法2 
using namespace std;
int ab,ac,cb1,cb2;
int main(){
	cin>>ab>>ac>>cb1>>cb2;
	int ab1=ac+cb1;
	int ab2=ac+cb2;
	//三个数字里面取最小值
	int mn=ab; //假设ab最小,打擂台 
	if(ab1<mn) mn=ab1; 
	if(ab2<mn) mn=ab2;
	
	cout<<mn; 
	return 0;
}
/*	Problem: 去旅行
	Language: C++	Result: 正确 	Time: 2026-07-10 20:19:05
	User: admin  	Problem: 4887	contest_id: 0*/
#include<iostream>
using namespace std;
int ab,ac,cb1,cb2;
int main(){
	cin>>ab>>ac>>cb1>>cb2;
	int ab1=ac+cb1;
	int ab2=ac+cb2;
	//三个数字里面取最小值
	if(ab<=ab1&&ab<=ab2){
		cout<<ab;
	}else if(ab1<=ab&&ab1<=ab2){
		cout<<ab1;
	}else{
		cout<<ab2;
	}
	return 0;
}
/*	Problem: 去旅行
	Language: C++	Result: 正确 	Time: 2026-07-10 20:17:34
	User: admin  	Problem: 4887	contest_id: 0*/
#include<iostream>
using namespace std;
typedef long long ll;
ll l,n,m,ans=0,a[100010];
bool check(int x){ //最短距离x的情况下,移走石头数量是否满足要求 
	int cnt=0,s=0; //s表示左端点的最新值 
	for(int i=1;i<=n+1;i++){ //遍历每一块石头 
		if(a[i]-a[s]<x) cnt++; //跳跃距离不够x,移走i
		else s=i; //更新左端点的最新值 
	} 
	return cnt<=m; //移走的石头不超过m块 
}
int main(){
	cin>>l>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	a[0]=0,a[n+1]=l; //第1块和最后1块的位置
	int L=1,R=l;
	while(L<=R){
		ll mid=(L+R)/2;
		if(check(mid)){ //可行,则答案可能可以更大 
			ans=mid;
			L=mid+1; 
		}else{ //不可行,则答案只能更小 
			R=mid-1;
		}
	}
	cout<<ans; 
	return 0;
}
/*
二分:最短距离,在当前距离下,移走的石头数量是否<=m
      如果移走的石头满足要求,答案可能可以更大,左指针右移
	  如果移走的石头>m,答案只能更小,右指针左移 
*/

/*	Problem: 跳石头
	Language: C++	Result: 正确 	Time: 2026-07-10 17:40:40
	User: admin  	Problem: 2069	contest_id: 0*/
#include<iostream>
using namespace std;
int n,s[10],a[25],ans=0;
int main(){
	for(int i=1;i<=4;i++) cin>>s[i]; //科目1~科目4的题目数量
	for(int t=1;t<=4;t++){ //科目1~科目4
		int sum=0;
		for(int i=1;i<=s[t];i++){ //输入科目t的每道题的时间 
			cin>>a[i]; 
			sum+=a[i]; //做题总时间 
		} 
		int u=1<<s[t],res=sum; 
		for(int i=0;i<u;i++){ //子集枚举 
			int left=0; //算一边就可以了
			for(int j=0;j<s[t];j++){
				if(i&(1<<j)) left+=a[j];
			} 
			int right=sum-left; //另一边 
			res=min(res,max(left,right));  //计算该科目花费的最小时间 
		} 
		ans+=res; //计算所有科目花费的总时间 
	} 
	cout<<ans; 
	return 0;
}
/*
对于某个科目而言,就是怎么均衡分配的问题 :
用子集枚举,1表示左脑在做,0表示右脑在做,那么可以用 0~2^s[t]-1来表示所有的做题方案。
对于每一个做题方案,取左脑的时间和 与 右脑的时间和 的差值绝对值的最小值,
当差值绝对值的最小时,即max(左脑的时间和,右脑的时间和)完成该科目的最少时间 
*/

/*	Problem: 考前临时抱佛脚
	Language: C++	Result: 正确 	Time: 2026-07-10 16:56:03
	User: admin  	Problem: 2346	contest_id: 0*/
#include<iostream>
#include<cmath> 
using namespace std;
int n,a[20],ans=0,f[10010][15];//ans表示方案数,f[i]记录第i种方案 
int main(){
	cin>>n;
	for(int i=1;i<=10;i++) a[i]=1; //三进制的最小数字,每种配料至少用1克
	for(int i=1;i<=pow(3,10);i++){
		for(int j=1;j<=10;j++){ //从低位到高位处理三进制数字的进位 
			if(a[j]==4){ //第j位需要进位 
				a[j+1]++; //高位+1
				a[j]=1; 
			}
		}  //循环结束,得到一个完美的三进制数字(枚举的可能方案) 
		int cnt=0;
		for(int j=1;j<=10;j++) cnt+=a[j]; //计算配料总质量 
		if(cnt==n){ //正好是答案 
			ans++; //方案数+1
			for(int j=1;j<=10;j++) f[ans][j]=a[j]; //记录当前合法方案 
		} 
		a[1]++; //准备下一个三进制数字 
	} 
	cout<<ans<<endl;
	for(int i=1;i<=ans;i++){ //循环输出ans种方案 
		for(int j=10;j>=1;j--) cout<<f[i][j]<<" "; //从高位到低位输出方案
		cout<<endl; 
	} 
	return 0;
}

/*	Problem: 烤乳猪
	Language: C++	Result: 正确 	Time: 2026-07-10 16:23:21
	User: admin  	Problem: 2324	contest_id: 0*/
#include<iostream>
using namespace std;
typedef long long ll; 
ll n,m,a[1000010],ans=-1,l=0,r=0;
ll check(ll x){ //锯片高度为x,带走的木材数量 
	ll cnt=0;
	for(int i=1;i<=n;i++){
		if(a[i]>x) cnt+=a[i]-x; //树比锯片高,才能带走木材 
	} 
	return cnt; 
} 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		r=max(r,a[i]); //最高高度 
	}
	while(l<=r){
		ll mid=(l+r)/2;
		if(check(mid)>=m){ //够吗 
			ans=mid;  //锯片最高的合法高度,带走木材尽可能刚刚达到m的要求,没有浪费 
			l=mid+1; 
		}else{
			r=mid-1;
		}
	} 
	cout<<ans;
	return 0;
}
/*
所求答案在一个明显的单调区间上, 
*/

/*	Problem: 伐木工人
	Language: C++	Result: 正确 	Time: 2026-07-10 15:53:17
	User: admin  	Problem: 2392	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[100010],q,x;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	scanf("%d",&q);
	while(q--){ //q轮询问 
		scanf("%d",&x);
		int l=1,r=n,ans=-1; //ans是本轮查找的答案 
		while(l<=r){
			int mid=l+(r-l)/2;   //等价于(l+r)/2; 这种可以避免r过大时,l+r数据溢出 
			if(x>a[mid]){ //答案在右边
				l=mid+1;
			}else{ 
				ans=mid;  //从左到右,第一个>=x的位置的下标 
				r=mid-1;
			}
		}
		if(a[ans]==x) printf("%d ",ans);
		else printf("-1 "); 
	}
	return 0;
}
/*	Problem: 二分查找左边界
	Language: C++	Result: 正确 	Time: 2026-07-10 15:39:06
	User: admin  	Problem: 1231	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[100010],q,x;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	scanf("%d",&q);
	while(q--){
		scanf("%d",&x);
		int l=1,r=n,flag=0; //flag表示是否找到 
		while(l<=r){
			int mid=l+(r-l)/2;   //等价于(l+r)/2; 这种可以避免r过大时,l+r数据溢出 
			if(x==a[mid]){ //正好找到 
				printf("%d\n",mid);
				flag=1; //找到了,标记为1 
				break; 
			}else if(x>a[mid]){ //答案在右边 
				l=mid+1; 
			}else{  //答案在左边 
				r=mid-1;
			}
		}
		if(!flag) printf("-1\n");  //循环结束,没有找到x,标记仍然为0 
	}
	return 0;
}
/*	Problem: 二分查找
	Language: C++	Result: 正确 	Time: 2026-07-10 15:08:12
	User: admin  	Problem: 1200	contest_id: 0*/
#include<iostream>
using namespace std;
string s; 
int n;
int main(){
	cin>>s>>n; //在s中删掉n位数字
	while(n--){
		int i=0; //从前往后找数字,该数字是第一个升序的末尾数字
		while(s[i]<=s[i+1]) i++; //i到了第一个升序的末尾
		s.erase(i,1); 
	} 
	while(s[0]=='0'&&s.size()>1) s.erase(0,1);  //去掉数字的前导0 
	cout<<s;
	return 0;
}
/*	Problem: 删数问题
	Language: C++	Result: 正确 	Time: 2026-07-10 14:39:22
	User: admin  	Problem: 1259	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans=0,last=-1; //last表示前面已经选择的最后一个右端点 
struct node{
	int l,r;
}a[10010];
bool cmp(node n1,node n2){
	return n1.r<n2.r; //按照右端点从小到大排序
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i].l>>a[i].r;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		if(a[i].l>last){ //第i个区间不包含last
			ans++;  //增加一个选点
			last=a[i].r;  //更新最后一个选点 
		}
	} 
	cout<<ans; 
	return 0;
}
/*贪心策略:
1 按照右端点从小到大排序
2 从第1个区间开始选点:右端点r;如果第2个区间包含右端点,直接过掉,...,
过到第i个区间不再包含r,需要新增加一个选点:第i个区间的右端点,... 
*/

/*	Problem: 区间选点
	Language: C++	Result: 正确 	Time: 2026-07-10 14:15:05
	User: admin  	Problem: 1706	contest_id: 0*/
#include<iostream>
#include<cmath>
using namespace std;
int n,cnt=0,a[15],ans[10000][15];//a[i]表示第i种配料的质量 
int main(){
    cin>>n;
    for(int i=1;i<=10;i++) a[i]=1; //初始化每一种配料质量为1 
    for(int i=1;i<=pow(3,10);i++){//1~3^10 
        for(int j=1;j<=10;j++){
            if(a[j]==4){
                a[j+1]++;//向j+1位置进位1 
                a[j]=1; //当前位置归1 
            }
        }
        int ret=0;
        for(int j=1;j<=10;j++) ret+=a[j]; //累加每一位每一种配套的质量 
        if(ret==n){ //恰好是需要的美味度n 
            cnt++; //方案数+1 
            for(int j=1;j<=10;j++) ans[cnt][j]=a[j];//记录第cnt种方案 
        }
        a[1]++;
    }
     
    cout<<cnt<<endl;
    for(int i=1;i<=cnt;i++){
        for(int j=10;j>=1;j--) cout<<ans[i][j]<<' ';//字典序输出 
        cout<<endl;
    }
    return 0;
}
/*	Problem: 烤乳猪
	Language: C++	Result: 正确 	Time: 2026-07-10 10:09:27
	User: admin  	Problem: 2324	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a,b,aa=0,bb=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){//循环n次 
		cin>>a>>b; //出拳
		if(a==b){ //平局 
			aa+=1;  //各得1分 
			bb+=1;
		}else if(a==0&&b==1 || a==1&&b==2 || a==2&&b==0){ //a赢了,b输了 
			aa+=2;  //a得2分,b不得分 
		}else{  //a输了,b赢了 
			bb+=2;  //b得2分,a不得分 
		} 
	}
	cout<<aa<<" "<<bb; 
	return 0;
}
/*
6
0 1
2 2
0 2
0 1
2 2
1 2
*/

/*	Problem: 石头剪刀布
	Language: C++	Result: 正确 	Time: 2026-07-09 20:37:26
	User: admin  	Problem: 4115	contest_id: 0*/
#include<iostream>
using namespace std;
int m,d;
int main(){
	scanf("%d %d",&m,&d); //注意点:变量前面需要取地址符& 
	//%2d整数宽度为2,%02d宽度为2,不足2则前面补0 
	printf("%02d-%02d",m,d);  
	return 0;
}
/*	Problem: 日期输出
	Language: C++	Result: 正确 	Time: 2026-07-09 20:29:40
	User: admin  	Problem: 2955	contest_id: 0*/
#include<iostream>
using namespace std;
int m,d;
int main(){
	cin>>m>>d;
	if(m<10) cout<<0<<m; //不足两位,则补0 
	else cout<<m;
	
	cout<<"-";
	
	if(d<10) cout<<0<<d; //不足两位,则补0
	else cout<<d; 
	
	return 0;
}
/*	Problem: 日期输出
	Language: C++	Result: 正确 	Time: 2026-07-09 20:26:24
	User: admin  	Problem: 2955	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){ //循环n次 
		int x; cin>>x; //在循环中输入数字x 
		if(x%10<=4) cout<<x-x%10<<endl;  //n的个位如果是0~4,则直接减掉
		else cout<<x-x%10+10<<endl;
	} 
	return 0;
}
/*
输入数字n
n的个位如果是0~4,则直接减掉
n的个位如果是5~9,则减掉个位且+10 
*/

/*	Problem: 四舍五入.
	Language: C++	Result: 正确 	Time: 2026-07-09 19:51:19
	User: admin  	Problem: 4353	contest_id: 0*/
#include<iostream>
using namespace std;
int n,x,y;
int main(){
	cin>>n>>x>>y; 
	if(y%x==0){ //正好吃光 y/x 本 
		cout<<n-y/x; 
	}else{//吃光 y/x 本 ,还有 1本书没啃完 
		cout<<n-y/x-1; 
	}
	return 0;
}
/*	Problem: 图书馆里的老鼠.
	Language: C++	Result: 正确 	Time: 2026-07-09 19:44:59
	User: admin  	Problem: 4352	contest_id: 0*/
#include<iostream>
using namespace std;
double n;
int main(){
	cin>>n; //距离
	double a=n/1.2;      //走路的时间
	double b=n/3.0+50;   //骑车的时间 
	if(a<b){        //走路快 
		cout<<"Walk"; 
	}else if(b<a){  //骑车快 
		cout<<"Bike";
	}else{
		cout<<"ALL";
	}
	return 0;
}
/*	Problem: 骑车与走路
	Language: C++	Result: 正确 	Time: 2026-07-09 19:27:24
	User: admin  	Problem: 1621	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b;
int main(){
	cin>>a>>b; //输入幸运、鼓励
	if(a>=10 || b>=20){//10个“幸运”、或20个“鼓励”
		cout<<1;
	}else{
		cout<<0;
	}
	return 0;
}
/*	Problem: 收集瓶盖赢大奖
	Language: C++	Result: 正确 	Time: 2026-07-09 19:18:42
	User: admin  	Problem: 1619	contest_id: 0*/
#include<iostream>
#include<climits> 
using namespace std;
int n,ans=INT_MAX,s[20],k[20];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>s[i]>>k[i];
	for(int i=1;i<=(1<<n)-1;i++){ //子集枚举  1~2^n-1 
		int ss=1,kk=0; //当前这种选择方案的酸度积ss,苦度和kk
		for(int j=0;j<n;j++){
			if(i&(1<<j)){ //判断i的第j位是否是1,是1就表示选择配料编号j+1 
				ss*=s[j+1];
				kk+=k[j+1]; 
			}
		} 
		ans=min(ans,abs(ss-kk));  //酸度和与苦度和的差值绝对值,取最小 
	}
	cout<<ans; 
	return 0;
}
/*	Problem: PERKET
	Language: C++	Result: 正确 	Time: 2026-07-09 17:57:22
	User: admin  	Problem: 2347	contest_id: 0*/
#include<iostream>
#include<stack>
using namespace std;
string s[1010]; 
int k=0;
stack<double> st; //浮点数 
int main(){
	while(cin>>s[++k]){} //输入 
	for(int i=k;i>=1;i--){ //从后往前遍历
		if(s[i][0]=='+'){
			double x=st.top();st.pop();
			double y=st.top();st.pop();
			st.push(x+y); 
		}else if(s[i][0]=='-'){
			double x=st.top();st.pop();
			double y=st.top();st.pop();
			st.push(x-y); 
		}else if(s[i][0]=='*'){
			double x=st.top();st.pop();
			double y=st.top();st.pop();
			st.push(x*y); 
		}else if(s[i][0]=='/'){
			double x=st.top();st.pop();
			double y=st.top();st.pop();
			st.push(x/y); 
		}else if(s[i][0]>='0'&&s[i][0]<='9'){ //碰到数字入栈 
			double x=stof(s[i]);  //字符串转浮点数
			st.push(x); 
		}
	} 
	printf("%.2lf",st.top());
	return 0;
}
/*
前缀表达式计算:从后往前遍历,碰到数字入栈,碰到符号取出栈顶和次顶计算,然后结果入栈 
*/

/*	Problem: 波兰表达式
	Language: C++	Result: 正确 	Time: 2026-07-09 17:23:04
	User: admin  	Problem: 1909	contest_id: 0*/
#include<iostream>
#include<queue> 
using namespace std;
int n,ans=0;
string s[110];
queue<string> q[10]; 
//第一轮:q[1]~q[9]存放数字1~9的扑克
//第二轮:q[1]~q[4]依次存放A~D的扑克 
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>s[i];
	for(int i=1;i<=n;i++){ //第一轮:遍历n张扑克,进行第一轮入队 
		int x=s[i][1]-'0'; //字符转数字
		q[x].push(s[i]);   //扑克牌入队 
	}
	int k=0; //重新存放数据的编号 
	for(int i=1;i<=9;i++){ //遍历每一个队列 
		printf("Queue%d:",i);
		while(q[i].size()){ //第i个队列非空,则出队 
			cout<<q[i].front()<<" ";
			s[++k]=q[i].front(); ////出队数据,重新存放到s[]
			q[i].pop();
		}
		cout<<endl; 
	} 
	
	for(int i=1;i<=n;i++){ //第二轮:遍历n张扑克,进行第二轮入队 
		int x=s[i][0]-'A'+1; //字符转数字 A~1 B~2 C~3 D~4
		q[x].push(s[i]);   //扑克牌入队 
	}
	k=0; //重新存放数据的编号 
	for(int i=1;i<=4;i++){ //遍历每一个队列 
		printf("Queue%c:",i+'A'-1);
		while(q[i].size()){ //第i个队列非空,则出队 
			cout<<q[i].front()<<" ";
			s[++k]=q[i].front(); ////出队数据,重新存放到s[]
			q[i].pop();
		}
		cout<<endl; 
	} 
	
	for(int i=1;i<=n;i++) cout<<s[i]<<" "; //排序结果 
	return 0;
}

/*	Problem: 扑克牌排序
	Language: C++	Result: 正确 	Time: 2026-07-09 16:55:49
	User: admin  	Problem: 2737	contest_id: 0*/
#include<iostream>
#include<queue>
using namespace std;
int m,n,a[110],b[110],x=0;
queue<int> q;
int main(){
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>a[i]; //0是作弊猴子
		q.push(i); //猴子编号依次入队 
	}
	cin>>n;
	while(q.size()>1){ //留下一只,是胜利者 
		x++; //报数
		int head=q.front(); //队首元素
		q.pop(); //出队 
		if(x%n==0){ //应该出局 
			if(a[head]==0){
				b[head]++; //作弊次数+1
				if(b[head]==1) q.push(head); //只作弊一次,可以回到队尾 
			} 
		}else{ //不用出局 
			q.push(head); //回到队尾 
		} 
	}
	cout<<q.front(); 
	return 0;
}
/*	Problem: 新猴王
	Language: C++	Result: 正确 	Time: 2026-07-09 16:27:57
	User: admin  	Problem: 1288	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
	int l,r; //活动区间 
}a[10010]; 
int n,ans=0,last=-999;
bool cmp(node n1,node n2){
	return n1.r<=n2.r; //按照活动的结束时间从小到大排序
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i].l>>a[i].r; //输入开始时间,结束时间
	sort(a+1,a+n+1,cmp); 
	for(int i=1;i<=n;i++){
		if(a[i].l>=last){ //始时间>=最后一场活动的结束时间,则可以安排 
			last=a[i].r;  //更新最后一场活动的结束时间
			ans++; 
		}
	} 
	cout<<ans;
	return 0;
}
/*
贪心策略:
1 按照活动的结束时间从小到大排序;
2 从前往后遍历活动,让结束时间早的活动,优先安排;
  当第i场活动尝试安排时,只要他的开始时间>=最后一场活动的结束时间,则可以安排 
*/

/*	Problem: 活动选择
	Language: C++	Result: 正确 	Time: 2026-07-09 15:52:49
	User: admin  	Problem: 1705	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[110],x=0;//a[i]表示第i套系统能够拦截的高度,x表示目前有x套系统 
int main(){
	while(cin>>n){
		int flag=0; //0表示无法拦截 
		for(int i=1;i<=x;i++){//从前往后遍历x套系统 
			if(a[i]>=n){ //可以拦截 
				a[i]=n; //第i套系统的拦截高度更新为n  
				flag=1; //标记可以拦截 
				break; 
			} 
		} 
		if(flag==0) a[++x]=n; //新增一套系统,拦截高度更新为n 
	} 
	cout<<x; 
	return 0;
}
/*
贪心策略:
1、如果之前已经有的系统无法拦截,必须新增系统;
2、如果之前已经有的系统可以拦截,那么应该是从前往后找第一个可以拦截的系统,这样是最优选择。 
*/

/*	Problem: 导弹拦截问题
	Language: C++	Result: 正确 	Time: 2026-07-09 15:29:57
	User: admin  	Problem: 1258	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,ans=0,a[1010],s[210];//s[i]表示第i个水龙头目前的等待时间 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	for(int i=1,k=1;i<=n;i++,k++){ //第i个人,第k个水龙头 
		if(k==m+1) k=1; //水龙头一共m个 
		s[k]+=a[i]; //第i个人在第k个水龙头打水 
		ans+=s[k];  //累加:第i个人花费的总时间 
	} 
	cout<<ans; 
	return 0;
}
/*
贪心策略:将打水时间从小到大排序,让打水时间短的人先打水,这样总时间是最短的 
*/

/*	Problem: 排队打水
	Language: C++	Result: 正确 	Time: 2026-07-09 15:14:04
	User: admin  	Problem: 1256	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[10010]={0,1}; //待备忘录的递归 
int f(int n){ //计算n有多少种方案 
	if(a[n]) return a[n]; //小本本有答案,直接返回 
	a[n]=1;     //默认n本身就是一个解
	for(int i=1;i<=n/2;i++){ //大问题分解成小问题 
		a[n]+=f(i); //子问题的方案数累加 
	} 
	return a[n]; 
}
int main(){
	cin>>n;
	cout<<f(n); 
	return 0;
}
/*	Problem: 数的计数
	Language: C++	Result: 正确 	Time: 2026-07-09 15:01:57
	User: admin  	Problem: 1250	contest_id: 0*/
#include<iostream>
#include<stack>
using namespace std;
int n;
stack<int> st;
void f(int x,int B){//递归实现的短除法 
	if(x==0) return;
	st.push(x%B);
	f(x/B,B);
}
void turn(int x,int B){//将x转成B进制数 
	if(x==0){
		printf("0(%d)\n",B); return;
	} 
	if(x<0) printf("-"),x=-x;
	f(x,B); //递归实现的短除法 
	while(st.size()){
		int x=st.top(); st.pop(); //取出栈顶,并出栈 
		if(x<=9) cout<<x;
		else cout<<char(x-10+'A');
	}	
	printf("(%d)\n",B); 
}
int main(){
	cin>>n;
	turn(n,2); 
	turn(n,8); 
	turn(n,16); 
	return 0;
}
/*	Problem: 进制转换
	Language: C++	Result: 正确 	Time: 2026-07-09 14:28:39
	User: admin  	Problem: 1161	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
void f(int n,char a,char b,char c){
	if(n==1){
		cout<<a<<"->"<<c<<endl; //直接移动第n个盘子 
		return;
	}
	
	f(n-1,a,c,b);
	cout<<a<<"->"<<c<<endl; //直接移动第n个盘子 
	f(n-1,b,a,c); 
}
int main(){
	cin>>n;
	f(n,'A','B','C'); 
	return 0;
}
/*	Problem: 汉诺塔
	Language: C++	Result: 正确 	Time: 2026-07-09 14:16:03
	User: admin  	Problem: 1246	contest_id: 0*/
#include<iostream>
using namespace std;
int x,n,ans=0;
int main(){
    while(scanf("%d",&x)!=EOF){
        n++; //统计个数 
        ans+=x; //统计总价值 
    } 
    printf("%d\n%d",n,ans);
    return 0;
}
/*	Problem: 钱币
	Language: C++	Result: 正确 	Time: 2026-07-09 09:42:15
	User: admin  	Problem: 3700	contest_id: 0*/
#include<iostream>
using namespace std;
int x,n,ans=0;
int main(){
    while(scanf("%d",&x)!=EOF){
        n++; //统计个数 
        ans+=x; //统计总价值 
    } 
    printf("%d\n%d",n,ans);
    return 0;
}
/*	Problem: 钱币
	Language: C++	Result: 正确 	Time: 2026-07-09 09:41:46
	User: admin  	Problem: 3700	contest_id: 1286*/
#include<iostream>
using namespace std;
int x,n,ans=0;
int main(){
	while(cin>>x){
		n++; //统计个数 
		ans+=x; //统计总价值 
	} 
	cout<<n<<endl<<ans; 
	return 0;
}

/*	Problem: 钱币
	Language: C++	Result: 正确 	Time: 2026-07-09 09:32:53
	User: admin  	Problem: 3700	contest_id: 0*/
#include<iostream>
#include<vector> 
#include<algorithm>
using namespace std;
int n,ans=0;
vector<string> v[20][40]; //v[i][j]表示i月j日过生日的名字列表 
bool cmp(string s1,string s2){//按名字从短到长按序输出,长度相同的按字典序输出
	if(s1.size()==s2.size()) return s1<s2;
	return s1.size()<s2.size();
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		string s;int x,y;
		cin>>s>>x>>y;
		v[x][y].push_back(s); //将x月y日过生日的人存储起来 
	} 
	for(int i=1;i<=12;i++){ //月份
		for(int j=1;j<=31;j++){ //日期 
			if(v[i][j].size()>1){ //至少两人生日相同 
				ans++; //有生日相同的输出 
				sort(v[i][j].begin(),v[i][j].end(),cmp); 
				cout<<i<<" "<<j<<" ";
				for(int k=0;k<v[i][j].size();k++){
					cout<<v[i][j][k]<<" "; 
				}
				cout<<"\n";
			} 
		} 
	} 
	
	if(ans==0) cout<<"None"; 
	return 0;
}
/*
*/

/*	Problem: 生日相同
	Language: C++	Result: 正确 	Time: 2026-07-08 17:50:26
	User: admin  	Problem: 3872	contest_id: 0*/
#include<iostream>
#include<stack>
using namespace std;
int n,ans=0;
string s;
bool check(string s){
	stack<char> st;  //多组数据,注意栈的初始化 
	for(int i=0;i<s.size();i++){
		if(s[i]=='<'){
			st.push(s[i]);
		}else if(s[i]=='('){//栈顶不能有( 更低的括号,如果有则非法,否则入栈。
			if(st.size()&&st.top()=='<') return false;
			else st.push(s[i]);
		}else if(s[i]=='['){
			if(st.size()&&(st.top()=='<' || st.top()=='(' )) return false;
			else st.push(s[i]);
		}else if(s[i]=='{'){
			if(st.size()&&(st.top()=='<' || st.top()=='(' || st.top()=='[' )) return false;
			else st.push(s[i]);
		}else if(s[i]=='>'){
			if(st.size()&&st.top()=='<') st.pop(); //匹配 
			else return false;
		}else if(s[i]==')'){
			if(st.size()&&st.top()=='(') st.pop(); //匹配 
			else return false;
		}else if(s[i]==']'){
			if(st.size()&&st.top()=='[') st.pop(); //匹配 
			else return false;
		}else if(s[i]=='}'){
			if(st.size()&&st.top()=='{') st.pop(); //匹配 
			else return false;
		}
	}
	
	if(st.size()) return false;
	else return true;
}
int main(){
	cin>>n;
	while(n--){
		cin>>s;
		if(check(s)) cout<<"YES\n";
		else cout<<"NO\n";
	}
	return 0;
}
/*
左括号在入栈前需要检查:栈顶不能有比待入栈的优先级更低的括号,如果有则非法,否则入栈。
右括号检查栈顶是否匹配。 

6
((
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]

*/

/*	Problem: 有优先级的括号匹配问题
	Language: C++	Result: 正确 	Time: 2026-07-08 17:02:25
	User: admin  	Problem: 1333	contest_id: 0*/
#include<iostream>
using namespace std;
string a,b;
int ans=0; //答案是相同子串的长度最大值 
int main(){
	cin>>a>>b;
	int lena=a.size(),lenb=b.size();
	int len=min(lena,lenb); 
	for(int i=len;i>=1;i--){//长度从大到小枚举
		string s1=a.substr(0,i),s2=b.substr(lenb-i,i);
		if(s1==s2){
			ans=i;
			break;
		}
	}
	for(int i=len;i>ans;i--){//长度从大到小枚举
		string s1=b.substr(0,i),s2=a.substr(lena-i,i);
		if(s1==s2){
			ans=i;
			break;
		}
	}
	cout<<ans;
	return 0;
}
/*
1 a取前缀,b取后缀,长度从大到小枚举,判断两个子串是否一样,一样则更新最大值,break; 
1 b取前缀,a取后缀,长度从大到小枚举,判断两个子串是否一样,一样则更新最大值,break; 
*/

/*	Problem: 牛棚回声
	Language: C++	Result: 正确 	Time: 2026-07-08 16:32:33
	User: admin  	Problem: 1138	contest_id: 0*/
#include<iostream>
#include<algorithm> 
using namespace std;
long long n,c,a[200010],ans=0;
int main(){
	cin>>n>>c;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	for(int i=1,l=1,r=1;i<=n;i++){ //枚举被减数a[i] 
		while(a[l]<a[i]-c&&l<=n) l++; //减数的区间的左边界更新 
		while(a[r]<=a[i]-c&&r<=n) r++; //减数的区间的右边界更新 
		if(a[i]-a[l]==c) ans+=r-l;  //符合条件的减数区间的左右边界之差 
	}
	cout<<ans;
	return 0;
}
/*
对于被减数a[i]而言,直接查找符合条件的减数区间的左右边界,可以得到数对的数量 
l:表示减数区间的左边界
r:表示减数区间的右边界(开区间) 
*/

/*	Problem: A-B数对
	Language: C++	Result: 正确 	Time: 2026-07-08 16:17:23
	User: admin  	Problem: 1692	contest_id: 0*/
#include<iostream>
using namespace std;
typedef long long ll; //别名
ll gcd(ll x,ll y){ //计算x和y的最大公约数 
	if(y==0) return x; //边界,即最大公约数 
	return gcd(y,x%y); 
}
ll a,b; 
int main(){
	cin>>a>>b;
	cout<<gcd(a,b);
	return 0;
}

/*	Problem: 辗转相除法求最大公约数
	Language: C++	Result: 正确 	Time: 2026-07-08 15:54:35
	User: admin  	Problem: 1155	contest_id: 0*/
#include<iostream>
using namespace std;
long long n,a[1010]={0,1,2}; //a[i]表示第i项,带备忘录的递归 
long long f(int x){ //计算数列的第x项 
    if(a[x]) return a[x];
    if(x==1) return 0;
    a[x]=f(x-1)+f(x-2); //没有计算的,计算出来存起来 
    return a[x]; 
}
int main(){
    cin>>n;
    cout<<f(n); 
    return 0;
}
/*	Problem: 走楼梯
	Language: C++	Result: 正确 	Time: 2026-07-08 15:46:54
	User: admin  	Problem: 1239	contest_id: 0*/
#include<iostream>
using namespace std;
long long n,a[1010]={0,0,1,1}; //a[i]表示第i项,带备忘录的递归 
long long f(int x){ //计算数列的第x项 
	if(a[x]) return a[x];
	if(x==1) return 0;
	a[x]=f(x-1)+f(x-2); //没有计算的,计算出来存起来 
	return a[x]; 
}
int main(){
	cin>>n;
	cout<<f(n); 
	return 0;
}

/*	Problem: 用递归实现斐波那契数列
	Language: C++	Result: 正确 	Time: 2026-07-08 15:43:53
	User: admin  	Problem: 1178	contest_id: 0*/
#include<iostream>
using namespace std;
int n;
int f(int x){ //计算数列的第x项 
	if(x==1) return 0; //边界 
	if(x==2) return 1; //边界  
	return f(x-1)+f(x-2); //大问题分解为小问题 
}
int main(){
	cin>>n;
	cout<<f(n); 
	return 0;
}

/*	Problem: 用递归实现斐波那契数列
	Language: C++	Result: 正确 	Time: 2026-07-08 15:36:29
	User: admin  	Problem: 1178	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0;
int f(int x){ //计算1~x的和 
	if(x==1) return 1; //递归边界,返回答案 
	return x+f(x-1); //函数自己调用自己,规模变小了 
}
int main(){
	cin>>n;
	cout<<f(n); 
	return 0;
}

/*	Problem: 用递归实现累加
	Language: C++	Result: 正确 	Time: 2026-07-08 15:23:06
	User: admin  	Problem: 1176	contest_id: 0*/
#include<iostream>
#include<stack>
using namespace std;
int n;
stack<int> st; 
void turn(int x,int B){//将x转成B进制:短除法 
	if(x==0){ //特殊边界:0没有办法进入短除法的循环 
		printf("0(%d)\n",B); return;
	} 
	if(x<0) printf("-"),x=-x;  //负负得正 
	while(x){ //进入短除法 
		st.push(x%B); //保存余数
		x/=B;  //计算商 
	} 
	//输出余数 
	while(st.size()){ //栈不为空 
		if(st.top()<=9) printf("%d",st.top()); 
		else printf("%c",char(st.top()-10+'A')); //输出A~F
		st.pop();  //出栈 
	} 
	printf("(%d)\n",B); 
}
int main(){
	cin>>n;
	turn(n,2);
	turn(n,8);
	turn(n,16);
	return 0;
}
/*	Problem: 进制转换
	Language: C++	Result: 正确 	Time: 2026-07-08 14:35:50
	User: admin  	Problem: 1161	contest_id: 0*/
#include<iostream>
using namespace std;
long long q=1,ans=0;
string s; 
int main(){
	cin>>s;
	for(int i=s.size()-1;i>=0;i--){//从后往前,进行数位分离 
		int x=s[i]-'0';   //0~9的字符转数字 
		if(s[i]>='A')  x=s[i]-'A'+10; //A~F的字符转数字 
		
		ans+=x*q; //按位权展开,然后求和 
		q*=16; //下一轮的位权 
	}
	cout<<ans; 
	return 0;
}
/*	Problem: 十六进制转十进制
	Language: C++	Result: 正确 	Time: 2026-07-08 14:18:05
	User: admin  	Problem: 1818	contest_id: 0*/
#include<iostream>
using namespace std;
double a,b,c;
int main(){
	cin>>a>>b>>c;
	double s=a+b+c;
	if(s>=200){ //8折 
		printf("%.1lf",s*0.8);
	}else{    //9折 
		printf("%.1lf",s*0.9);
	}
	return 0;
}
/*
90 100 10
80 15 5
选择简单的数据测试,测试结果一目了然 
*/

/*	Problem: 超市的折扣
	Language: C++	Result: 正确 	Time: 2026-07-07 20:23:31
	User: admin  	Problem: 3479	contest_id: 0*/
#include<iostream>
using namespace std;
double a,b,c;
int main(){
	cin>>a>>b>>c;
	double s=a+b+c;
	if(s>=200){ //8折 
		printf("%.1lf",s*0.8);
	}else{    //9折 
		printf("%.1lf",s*0.9);
	}
	return 0;
}
/*	Problem: 超市的折扣
	Language: C++	Result: 正确 	Time: 2026-07-07 20:22:33
	User: admin  	Problem: 3479	contest_id: 0*/
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+10;
long long n,k,a[N],ans=0;
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	for(int i=1,j=n;i<j;){ //双指针 
		if(a[i]+a[j]==k){ //找到答案 
			cout<<"yes"<<endl;
			cout<<a[i]<<" "<<a[j];
			return 0; 
		}else if(a[i]+a[j]<k){ //和不够 
			i++; 
		}else{ //和大了 
			j--;
		}
	}
	cout<<"no"; 
	return 0;
}
/*
10 23
1 3 5 7 8 10 11 12 13 14 
*/

/*	Problem: 找和为k的两个元素
	Language: C++	Result: 正确 	Time: 2026-07-07 17:29:21
	User: admin  	Problem: 2322	contest_id: 0*/
#include<iostream>
using namespace std;
typedef long long ll; 
ll a,b,m,ans;
ll quickpow(ll a,ll b,ll m){
	ll res=1; //初始值,因为要连乘,初始化为1
	while(b){//直到b的二进制位取完,即b变成了0 
		if(b&1) res=res*a%m;
		a=a*a%m; //倍增 a^1  a^2  a^4  a^8  a^16  a^32 ... 
		b>>=1;  //抹掉最低位的1 
	} 
	return res; 
}
int main(){
	ll n,a,b,c,k;
	cin>>n;
	while(n--){
		cin>>a>>b>>c>>k;
		if(b-a==c-b){ //等差数列 
			ll gc=b-a; //公差
			ans=(a+gc*(k-1))%200907; 
		}else{ //等比数列 
			ll gb=b/a; //公比
			ans=(a*quickpow(gb,k-1,200907))%200907; 
		} 
		cout<<ans<<endl;
	}
	return 0;
}
/*	Problem: 序列的第k个数
	Language: C++	Result: 正确 	Time: 2026-07-07 17:04:10
	User: admin  	Problem: 1716	contest_id: 0*/
#include<iostream>
using namespace std;
typedef long long ll; 
ll a,b,m,ans=0;
ll quickpow(ll a,ll b,ll m){
	ll res=1; //初始值,因为要连乘,初始化为1
	while(b){//直到b的二进制位取完,即b变成了0 
		if(b&1) res=res*a%m;
		a=a*a%m; //倍增 a^1  a^2  a^4  a^8  a^16  a^32 ... 
		b>>=1;  //抹掉最低位的1 
	} 
	return res; 
}
int main(){
	cin>>a>>b>>m;
	cout<<quickpow(a,b,m);
	return 0;
}
/*
计算a^b,
1 取b的二进制的最低位,抹掉最低位 
     如果最低位是1,需要连乘 a^1 
     如果最低位是0,过
2 取b的二进制的最低位,抹掉最低位  
      如果最低位是1,需要连乘 a^2 
      如果最低位是0,过
3 取b的二进制的最低位,抹掉最低位  
      如果最低位是1,需要连乘 a^4 
      如果最低位是0,过
4 取b的二进制的最低位,抹掉最低位  
      如果最低位是1,需要连乘 a^8 
      如果最低位是0,过
...
直到b的二进制位取完,即b变成了0 
*/

/*	Problem: A的B次方
	Language: C++	Result: 正确 	Time: 2026-07-07 16:38:07
	User: admin  	Problem: 1715	contest_id: 0*/
#include<iostream>
using namespace std;
int n,a[100010],b[100010],mn=0;//mn表示1~i-1中前缀和的最小值 
int ans=-2e9;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=b[i-1]+a[i];
		ans=max(ans,b[i]-mn);
		
		mn=min(mn,b[i]); //为下一轮准备 
	} 
	cout<<ans; 
	return 0;
}
/*	Problem: 最大连续子段和
	Language: C++	Result: 正确 	Time: 2026-07-07 14:57:24
	User: admin  	Problem: 2318	contest_id: 0*/
#include<iostream>
using namespace std;
int n,ans=0,cnt=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){ //枚举1~n 
		cnt+=i; //累加
		//cout<<cnt<<endl; 
		ans+=cnt; //每一轮将最新的cnt再次累加 
	}
	cout<<ans; 
	return 0;
}
/*
第1轮中:ans+=1      (cnt=1) 
第2轮中:ans+=1+2     (cnt=1+2)
第3轮中:ans+=1+2+3   (cnt=1+2+3) 
...
第n轮中:ans+=1+2+3+...+n    (cnt=1+2+3+...+n) 
所以,我们可以用cnt变量在每一轮中表示上述式子中右侧的内容
*/

/*	Problem: 累计相加.
	Language: C++	Result: 正确 	Time: 2026-07-06 18:54:39
	User: admin  	Problem: 4040	contest_id: 0*/
#include<iostream>
using namespace std;
int a,b,c,d; 
int main(){
	cin>>a>>b>>c>>d;
	cout<<c*60+d-a*60-b; //全部转换为分钟,再计算 
	return 0;
}
/*	Problem: 时间规划.
	Language: C++	Result: 正确 	Time: 2026-07-06 18:45:27
	User: admin  	Problem: 4013	contest_id: 0*/
#include<iostream>
using namespace std;
const int N=5e6+10;
long long ans=0,s,e,p[N],k=0;//乘积可能会爆掉,所以定义为long long 
bool v[N]; //v[i]=1表示1是合数 
int main(){
	for(int i=2;i<=5000000;i++){ //欧拉筛,预处理质数 
		if(v[i]==0) p[++k]=i;
		for(int j=1;i*p[j]<=5000000;j++){
			v[i*p[j]]=1; //标记合数
			if(i%p[j]==0) break; //i是p[j]的倍数 
		}
	} 
	
	cin>>s>>e;
	for(int i=1;i<=k;i++){ //暴力枚举所有的半质数,即两个质数的乘积 
		for(int j=i;j<=k;j++){ //注意:j不能从1开始,避免重复计算 
			if(p[i]*p[j]>e) break; //跳出内层循环 
			if(p[i]*p[j]>=s&&p[i]*p[j]<=e){
				ans++;
			}
		}
	} 
	cout<<ans; 
	return 0;
}
/*	Problem: 半质数
	Language: C++	Result: 正确 	Time: 2026-07-06 17:53:15
	User: admin  	Problem: 1616	contest_id: 0*/
#include<iostream>
using namespace std;
const int N=5e6+10;
long long ans=0,s,e,p[N],k=0;
bool v[N]; //v[i]=1表示1是合数 
int main(){
	for(int i=2;i<=5000000;i++){ //欧拉筛,预处理质数 
		if(v[i]==0) p[++k]=i;
		for(int j=1;i*p[j]<=5000000;j++){
			v[i*p[j]]=1; //标记合数
			if(i%p[j]==0) break; //i是p[j]的倍数 
		}
	} 
	
	cin>>s>>e;
	for(int i=1;i<=k;i++){ //暴力枚举所有的半质数,即两个质数的乘积 
		for(int j=i;j<=k;j++){ //注意:j不能从1开始,避免重复计算 
			if(p[i]*p[j]>e) break; //跳出内层循环 
			if(p[i]*p[j]>=s&&p[i]*p[j]<=e){
				ans++;
			}
		}
	} 
	cout<<ans; 
	return 0;
}
/*	Problem: 半质数
	Language: C++	Result: 正确 	Time: 2026-07-06 17:52:33
	User: admin  	Problem: 1616	contest_id: 0*/
#include<iostream>
#include<map> 
using namespace std;
const int M=1e9+7; 
long long n,x,ans=1;
map<int,int> mp; //<质因数,出现次数>
void solve(long long x){ //将x分解质因数 
	for(int i=2;i*i<=x;i++){
		while(x%i==0){
			mp[i]++; //i的幂次+1
			x/=i; 
		}
	} 
	if(x>1) mp[x]++; //如果还剩下一个大于1的质因子 
} 
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x;
		solve(x); //分解质因数 
	}	
	
	for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++){ //遍历map 
		//cout<<it->first<<" "<<it->second<<endl; 
		long long sum=1, x=it->first, y=it->second, ji=1;
		for(int i=1;i<=y;i++){ //计算 x^0+x^1+...+x^y , sum表示 x^0+x^1+...+x^y
			ji=ji*x%M;         //ji依次表示x^1,x^2,...,x^y  
			sum=(sum+ji)%M;
		} 
		ans=ans*sum%M;  //计算 (x1^0+x1^1+...+x1^y2)*...*(xm^0+xm^1+...+xm^ym) 
	} 
	cout<<ans;
	return 0;
}

/*	Problem: 乘积的约数和
	Language: C++	Result: 正确 	Time: 2026-07-06 17:30:26
	User: admin  	Problem: 2444	contest_id: 0*/
#include<iostream>
#include<map>
using namespace std;
int T,n,ans=0;
int main(){
	scanf("%d",&T);
	while(T--){ //多组数据 
		map<int,bool> mp; 
		cin>>n;
		for(int i=1;i<=n;i++){
			int x; scanf("%d",&x);
			if(mp.count(x)==0){ //x是否已经在mp中标记 
				printf("%d ",x);
				mp[x]=true; //标记,类似与数组下标标记 
			}
		}
		printf("\n"); 
	}
	return 0;
}
/*	Problem: 不重复数字
	Language: C++	Result: 正确 	Time: 2026-07-06 16:51:11
	User: admin  	Problem: 2704	contest_id: 0*/
#include<iostream>
#include<map> 
using namespace std;
int n,a[100010],cnt=0;
map<int,int,greater<int> > mp; //默认根据关键字从大到小排序,先表示<分数,人数>,后更新为<分数,排名> 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		mp[a[i]]++;  //用分数作为关键字,进行计数,类似于数组下标计数 
	}
	
	for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++){
		int x=it->second;     //  x=it->second;   等价于 x=(*it).second; 
		//cout<<(*it).first<<" "<<x<<" "<<endl;
		(*it).second=cnt+1; //将人数 更新为 排名 
		cnt+=x; //下一个分数前面,有cnt个人 
	} 
	
	for(int i=1;i<=n;i++) printf("%d\n",mp[a[i]]); //输出每一个分数的排名 
	return 0;
}
/*	Problem: 学校排名
	Language: C++	Result: 正确 	Time: 2026-07-06 16:33:51
	User: admin  	Problem: 1868	contest_id: 0*/
#include<iostream>
#include<map> 
using namespace std;
int n,a[100010],cnt=0;
map<int,int,greater<int> > mp; //默认根据关键字从大到小排序,先表示<分数,人数>,后更新为<分数,排名> 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		mp[a[i]]++;  //用分数作为关键字,进行计数,类似于数组下标计数 
	}
	
	for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++){
		int x=(*it).second;
		//cout<<(*it).first<<" "<<x<<" "<<endl;
		(*it).second=cnt+1; //将人数 更新为 排名 
		cnt+=x; //下一个分数前面,有cnt个人 
	} 
	
	for(int i=1;i<=n;i++) printf("%d\n",mp[a[i]]); //输出每一个分数的排名 
	return 0;
}
/*
<关键字,值>  键值对 
*/

/*	Problem: 学校排名
	Language: C++	Result: 正确 	Time: 2026-07-06 16:29:01
	User: admin  	Problem: 1868	contest_id: 0*/
#include<iostream>
#include<map> 
using namespace std;
int n,a[100010],cnt=0;
map<int,int,greater<int> > mp; //默认根据关键字从大到小排序,先表示<分数,人数>,后更新为<分数,排名> 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		mp[a[i]]++;  //用分数作为关键字,进行计数,类似于数组下标计数 
	}
	
	for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++){
		int x=(*it).second;
		//cout<<(*it).first<<" "<<x<<" "<<endl;
		(*it).second=cnt+1; //将人数 更新为 排名 
		cnt+=x; //下一个分数前面,有cnt个人 
	} 
	
	for(int i=1;i<=n;i++) cout<<mp[a[i]]<<endl; //输出每一个分数的排名 
	return 0;
}
/*
<关键字,值>  键值对 
*/

/*	Problem: 学校排名
	Language: C++	Result: 正确 	Time: 2026-07-06 16:27:50
	User: admin  	Problem: 1868	contest_id: 0*/

重要提示:代码要自己写!

操作被阻止:禁止复制/粘贴/点击!