Codeforces Round #593(Div.2.ABC)

CSDN的第一篇博客从此篇开始

作为一名小白第一次接近做出了ABC三题,感到很是高兴
接下来是正题:
在这里插入图片描述

A

在这里插入图片描述
在这里插入图片描述
A题不难,由于第二堆最先会被取完
所以很容易想到贪心的做法:

  1. 执行第二种方案,实现用第二堆最少的石头实现最多
  2. 执行第一种方案,把第一堆和有可能剩下的第二堆榨干
#include<iostream>
using namespace std;
int main(){
 int n,a,b,c;
 cin>>n;
 int num;
 	for(int i=0;i<n;i++){
  	num=0;
  	cin>>a>>b>>c;
  	if(c/2>=b){
  	cout<<3*b<<endl;
  	}
  	else{
   	num+=(c/2)*3;
   	b-=num/3;
   	if(a>=b/2){
  	num+=(b/2)*3;
   	cout<<num<<endl;
   	}
    	else{
   	num+=a*3;
   	cout<<num<<endl;
   	}
 } 
 }
 return 0}

在这里插入图片描述

B

在这里插入图片描述
公式 (2m-1)n
考虑每一件礼物,它只可能装在第一个盒子里、第二个盒子里……
同时在第一个和第三个盒子里、同时在第二个和第三个盒子里……
一共2^m-1种
题目限时,所以需要用一个快速幂,可惜程序一直报错double不能转int64不知道为什么,最终没ac
(经检查,自定义函数名用了内置函数pow,但是我没用头文件cmath,这种情况也会使自定义函数无效吗?)

在这里插入图片描述

C

在这里插入图片描述
在这里插入图片描述最后没多少时间了,粗粗看了一眼C
简单来收就是要求所有组里面能运水数量最小值的最大值
显然是n2/2
以下转载外国友人的分析
在这里插入图片描述
而我把题目中的输入排序后找到了规律
在这里插入图片描述
于是

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
usingnamespace std;
int main()
{
	int n;	
	cin>>n;
	int a[305][305];
	bool flag=true;
	int sum=0;
	for(int j=1;j<=n;j++){
		if(flag){
  			for(int i=1;i<=n;i++){
   			sum++;
   			a[i][j]=sum;
   			}
  		}
  		else{
   			for(int i=n;i>=1;i--){
   			sum++;
   			a[i][j]=sum;
  			}
  		}
 	flag=!flag;
 	} 
 	for(int i=1;i<=n;i++){
  		cout<<a[i][1];
  		for(int j=2;j<=n;j++){
  		cout<<' '<<a[i][j];
  		}
  	cout<<endl;
 	}  
 return0;
}
END
发布了11 篇原创文章 · 获赞 0 · 访问量 191

猜你喜欢

转载自blog.csdn.net/YeHosea/article/details/102634895