A. Architecture

题意:要求你判断按题目所给的要求,能否形成矩阵,能就输出“possible”,否则,输出”impossible“,给v胡的条件是每行,每一列的最大值,问你能形成符合要求的矩阵
题解:我们可以先求出两个序列的最大值,判断它们是否相等,若相等,则可以,反之,不可以,这样做的原理是,行上的最大值一定再某一行上,列上的最大值一定在某一列上,而这两个数一定是同一个数,否则就会产生矛盾。 
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
	int r,c;
	cin>>r>>c;//行  列
	int E[150],N[150];
	for(int i=0;i<r;i++){
		cin>>E[i];
	}
	for(int i=0;i<c;i++){
		cin>>N[i];
		
	}
	/*----解法一 
	int f=1;
	for(int i=0;i<r;i++){
		int cnt=0;
		for(int j=0;j<c;j++){
			if(E[i]>N[j]){
				cnt++;
			}
		}	
		if(cnt==c){
			f=0;
		}
	}
	int g=1;
	for(int i=0;i<c;i++){
		int cnt=0;
		for(int j=0;j<r;j++){
			if(N[i]>E[j]){
				cnt++;
			}
		}
		if(cnt==r){
			g=0;
		}
	}
	if(f==1&&g==1){
		cout<<"possible"<<endl;
	}else{
		cout<<"impossible"<<endl;
	}*/ 
	//解法二 
	sort(E,E+r);
	sort(N,N+c);
	if(E[r-1]==N[c-1]){
		cout<<"possible"<<endkl
	}else{
		cout<<"impossible"<<endl; 
	}
	sort()
    return 0;
}

F Floor Plan

题意:这个题的本质是要你判断是否成立,给你,成立,则输出是指成立的,任意一组,均可。
题解:solve one:可以将化为,这时,我们只需要找出一组的因子,找出一数,使它到两个因子的“都相等”即可。
           solve two:这里要运用一些小知识:
              奇数+奇数 = 偶数,偶数+偶数=偶数,奇数+偶数=奇数
              奇数+奇数 = 偶数,偶数+偶数=偶数,奇数+偶数=奇数
                        当给出的是奇数时,一定是:奇数-偶数的,所以我们设为奇数,则为偶数,计算化简即可得到一个整式,这个整式的值为,我们可以反解出,最后,即可得                   到两个符合题意的整数,当是偶数是用同样的方法进行讨论。
代码:
解法一:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
ll m,k;
int main(){
	scanf("%lld",&n);
	int f=0;
	for(ll i=1;i*i<=n;i++){
		if(n%i==0){
			ll k1=n/i;//两个因子,都是整数 
			if((k1+i)%2==0){
				ll temp=(k1+i)/2;
				m=temp;
				f=1;
				k=abs(temp-i);
				break;	
			}
		}
	}
	if(f==1){
		cout<<m<<" "<<k<<endl;
	}else{
		cout<<"impossible"<<endl;
	}
    return 0;
}

G Greetings!

题意:这个题,没什么好说的,看懂题目,输出即可
#include<iostream>
#include<string.h>
using namespace std;
int main(){
	string ptr;
	cin>>ptr;
	int num=0;
	for(int i=0;i<ptr.length();i++){
		if(ptr[i]=='e'){
			num++;
		}
	}
	cout<<'h';
	for(int i=0;i<2*num;i++){
		cout<<'e';
	}
	cout<<'y'<<endl;
	return 0;
}

I Inquiry I

题意:这一题也比较简单,题目给你一串数列,要你判断当为和值时,这个表达式的值最大。
题解:首先想到的是模拟,不过会超时,其实,我们可以在输入数据的时候就将数列中的前项平方和算出来,用数组存,同理,亦可以算出最后n项和,最后在模拟,就不会超时了。
#include<iostream>
#include<string.h>
using namespace std;
long long num[1000005]={0};
long long a[1000005]={0};
long long b[1000005]={0};
int main(){
	long long n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>num[i];
		 if(i==0){
		 	a[i]=num[i]*num[i];
		 }else{
		 	a[i]=a[i-1]+num[i]*num[i];
		 }
	}
	for(int i=n-1;i>=0;i--){
	 	if(i==n-1){
	 		b[i]=num[i];	
		}else{
			b[i]=b[i+1]+num[i];
		}
	}
	long long max_n=-1;
	for(int i=0;i<n-1;i++){
		max_n=max(max_n,a[i]*b[i+1]);
	}
	cout<<max_n<<endl;
	return 0;
}