比赛名:Preliminaries for Benelux Algorithm Programming Contest 2019 时间2020.3.14

 

题意就是判断东天际线和北天际线的值可不可以满足(东天际线就是每一行的最大值,北天际线就是每一列的最大值)

判断条件其实很简单,就是看行上的最大值是否也是列上的最大值,如果是就满足。

 例1: 东天际线最大值是4,北天际线最大值也是4,所有条件成立。

例2:东天际线最大值是4,北天际线最大值是2,所有不满足。

 代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int r,c;
int a[1001],b[1001];
cin>>r>>c;
for(int i=0;i<r;i++){
cin>>a[i];
}
for(int i=0;i<c;i++){
cin>>b[i];
}
sort(a,a+r);
sort(b,b+c);
if(a[r-1]==b[c-1]){
cout<<"possible"<<endl;
}
else{
cout<<"impossible"<<endl;
}
return 0;
}

 

   题意很好懂就是找出有没有满足m^2-k^2=n的n,给的范围很大如果循环模拟的话肯定要超时,就要找规律。

规律:1=1^2-0^2  2 没有 3=2^2-1^2 4=2^2-0^2 5=3^2-2^2 6 没有 7=4^2-3^2……就是奇数都有m和k且m和k的和就是n并且相邻,偶数只有满足4的倍数才有4 16 64.

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
int main(){
scanf("%lld",&n);
if(n%2==0&&n%4!=0){
printf("impossible");
return 0;
}
if(n%2==0){
ll a=n/4;
printf("%lld %lld",a+1,a-1);
}
else
printf("%lld %lld",(n+1)/2,(n+1)/2-1);

return 0;
}

 

 这题就是输入一个字符串找出有几个e然后原样输出不过e的数目要翻倍

代码:

#include<iostream>
using namespace std;
int main(){
	string a;
	int sum=0;
	cin>>a;
	for(int i=0;i<a.size();i++){
		if(a[i]=='e'){
		   sum++;	
		}
	}
	sum*=2;
	cout<<"h";
	for(int i=0;i<sum;i++){
		cout<<"e";
	}
	cout<<"y"<<endl;
	return 0;
} 

 这题根据题目给的意思进行运算就行,注意数字的范围要开到longlong

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1000000+8];
int main()
{
ll n,i,j,k=0,sum=0,mul=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
ll amax=-1;
ll fin,h,m;
for(i=0;i<n;i++)
{
mul+=a[i]*a[i];
sum-=a[i];
k*=sum;
h=mul-a[i]*a[i];
h*=(sum+a[i]);
fin=max(k,h);
amax=max(fin,amax);
}
cout<<amax;
return 0;

}

原文地址:https://www.cnblogs.com/liyongqi/p/12493802.html