武汉工程大学2020GPLT选拔赛补题

不写头文件了,显得代码长

A题

直接写

int main(){
	int i,j;
	string s="I LOVE WIT";
	for(i=0;i<s.size();i++){
		for(j=0;j<i;j++){
			cout<<" ";
		}
		cout<<s[i]<<endl;		
	}
	return 0;
} 

B题

最后判断一下即可

int main(){
	int a;
	cin>>a;
	double c=a*12*2.54*10;
	if(c==(int)c)
	printf("%d",(int)c);
	else
	printf("%.1lf",c);
	return 0;
} 

C题

就是题目看着长,也是直接模拟就可以了
注意不是1的时候,还要乘%99
可以用一个%*c忽略读入的%

typedef long long  ll;
double c[10];
int main(){
	int i,e,f;
	double a;
	for(i=0;i<7;i++){
		scanf("%lf%*c",&c[i]);
	}
	cin>>e>>f;
	if(f==1)
	printf("%.2lf%%",c[e]/100);
	else
	printf("%.2lf%%",c[e]*99/100);
	return 0;
}

D题

老话说得好,二进制杀我

代码我是我看的别人的,题解在代码注释里

#define mid 1000000007
typedef long long  ll;
//但凡我稍微了解一点点二进制,也不会死这么惨 
//审题啊,取反的位置是从哪里到哪里
int main(){
	//题目给的无符号整型,就写无符号整型,为啥我也晓不得 
	unsigned int ans=0,a;
	cin>>a;
	for(int i=1;i<=32;i++){
		ans<<=1;
		if(a&&(a&1)==0){//保证了a为0的时候就不取反了 
			ans+=1;
		}
		a>>=1;
	}
	cout<<ans;
	return 0;
}

E题

直接模拟就好了
注意输入字符串,不要输入数字,因为会有00输入

#define mid 1000000007
int main(){
	string s;
	int a,b,c;
	cin>>s;
	a=(s[0]-'0')*10+(s[1]-'0');
	b=(s[3]-'0')*10+(s[4]-'0');
	c=(s[6]-'0')*10+(s[7]-'0');
	c+=33;
	if(c>=60){
		c=c-60;
		b++;
	}
	b+=22;
	if(b>=60){
		b-=60;
		a++;
	}
	a+=1;
	if(a<19)
	cout<<"arrive on time";
	else if(a>=21)
	cout<<"too late";
	else
	cout<<"arrive late";
	return 0;
} 

F题

就是个模板二分
这个边界判断我就是不会啊,我吐了,无限试错

int main(){
	int a,b,c[100006],i;
	cin>>a>>b;
	for(i=0;i<a;i++){
		cin>>c[i];
	}
	int minmin=1;
	int maxmax=1e9;
	while(minmin<=maxmax){
		int mid=(minmin+maxmax)/2;
		int ans=0;
		for(i=0;i<a;i++){
			ans+=c[i]/mid;//每个鸽子可以分为几块肉 
		}
		if(ans>=b){
			minmin=mid+1;
		} 
		else maxmax=mid-1;
	}
	cout<<minmin-1;
	return 0;
} 

G题

可以分析出来,只要材料够多所有偶数都可以被拼出来。奇数不行
k段材料能够凑出的最长长度,就是k个材料相加
写在代码里了

#define mid 1000000007
typedef long long ll;
//long long > pow(2,60)
//前排提醒,慎用pow,用了就错 
ll f=1;
ll fang(){
	return f*=2;
}
int main(){
	ll a,b,sum=0,i;
	cin>>a>>b;
	if(b%2==1){
		cout<<"No";
		return 0;
	}//奇数凑不齐
	for(i=1;i<=a;i++){
		sum+=fang();//计算出i个材料能够凑出的最大值
		if(sum>=b){//能够凑出b这么长,那么自然最长的就是f,要不然i在上一轮就结束了
			cout<<"Yes"<<endl<<f;
			return 0;
		}
	}
	cout<<"No";//a个以内没找到
	return 0;
}```

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值