HPU暑期第三次常规积分赛

                                                                                                         【A】 

                                                                                                         【C】

                                                                                                                 【D】

                                                                                                    【E】

                                                                                                       【F】

                                                                                                           【G】

                                                                                                          【H】

                                                                                                     【I】

                                                                                                 【J】

给出一些代码,供参考:                                                                    【J】

#include<cstdio>
#include<algorithm>
using namespace std;
int a[1000+10];
int main()
{
	int n;
	while(~scanf("%d",&n)){
		for(int j=1;j<=n;j++){
			scanf("%d",&a[j]);
		}
		sort(a+1,a+1+n);
		int j;
		int sum=0;
		for(j=n;j>3;j-=2){
			sum+=min(a[j]+a[1]+a[2]+a[2],a[j]+a[j-1]+a[1]+a[1]);
		}
		if(n==1){
			printf("%d\n",a[1]);
		}else if(j==2){
			printf("%d\n",sum+a[2]);
		}else if(j==3){
			printf("%d\n",sum+a[1]+a[2]+a[3]);
		}
	}
	return 0;
}

                                                                                                              【I】

#include<cstdio>
#include<cstring>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
vector<ll> vecx,vecy;
ll a[30];
int main()
{
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	
	a[0]=1;
	for(ll i=1;i<=20;i++){
		a[i]=i*a[i-1];
	}
	int T;
	scanf("%d",&T);
	int Case=1;
	ll x,y;
	while(T--){
		scanf("%lld%lld",&x,&y);
		ll n=x,m=y;
		int flagx=0;
		int flagy=0;
		for(ll i=20;i>=1;i--){
			
			if(x-a[i]>=0){
				vecx.push_back(i);
				x-=a[i];
				if(x==0) flagx=1;
			} 
			
			if(y-a[i]>=0){
				vecy.push_back(i);
				y-=a[i];
				if(y==0) flagy=1;
			} 
		}
		printf("Case %d:",Case++);
		if(flagx+flagy==2){
			printf("SEYES\n");
			if(vecx.size()==vecy.size()){
				
				printf("%lld=%lld!",n,vecx[vecx.size()-1]);
				for(ll i=vecx.size()-2;i>=0;i--)
					printf("+%lld!",vecx[i]);
				printf("\n");
				
				printf("%lld=%lld!",m,vecy[vecy.size()-1]);
				for(ll i=vecy.size()-2;i>=0;i--)
					printf("+%lld!",vecy[i]);
				printf("\n");
				
			}else{
				printf("dWvWb\n");
			}
		}else if(flagx+flagy==1){
			printf("YNEOS\n");
			printf("dWvWb\n");
		}else{
			printf("ONO\n");
			printf("dWvWb\n");
		}
		
		vecx.clear();
		vecy.clear();
	}
	
	return 0;
}

                                                                                                       【H】

#include<cstdio>
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int main(){
    int T,n,a,b;
    //freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
    while(~scanf("%d %d %d",&n,&a,&b))
    {
    	int v=gcd(a,b);
    	if((n/v)%2)
    		puts("zzx");
    	else
    		puts("fk");
	}
    return 0;
}

                                                                                                         【D】

#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int)5e2+10;
const int mod = (int)1e9+7;
int dp[110][110];
int arr[110];
int main() {
    freopen("in.txt", "r", stdin);
    int n, k, T;
    cin >> T;
    while(T--) {
        cin >> n >> k;
        memset(dp, 0, sizeof dp);
        for(int i = 1; i <= n; ++i) {
            cin >> arr[i];
            dp[i][1] = 1;
        }
        for(int i = 1; i <= n; ++i) {
            for(int j = 2; j <= i; ++j) {
                for(int z = 1; z < i; ++z) {
                    if(arr[z] < arr[i])
                        dp[i][j] = (dp[i][j]+dp[z][j-1]) % mod;
                }
            }
        }
        int ans = 0;
        for(int i = 1; i <= n; ++i) {
            ans = (ans + dp[i][k]) % mod;
        }
        cout << ans << endl;
    }
    return 0;
}

                                                                                                       【C】

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 10;
double a[MAXN], b[MAXN];
int main() {
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
	int T, n;
	scanf("%d", &T);
	while(T--) {
		scanf("%d", &n);
		for(int i = 1; i <= n; ++i) scanf("%lf", &a[i]);
		int p = 0;
		for(int i = 3; i <= n - 1; ++i) {
			double ans = 0.0;
			for(int j = i + 1; j <= n; ++j) {
				ans = max(ans, a[i] / a[j]);
			}
			b[i] = ans;
		}
		for(int i = n - 2; i >= 3; --i) {
			b[i] = max(b[i], b[i + 1]);
		}
		double y = -1e20;
		for(int i = 1; i <= n - 3; ++i) {
			for(int j = i + 1; j <= n - 2; ++j) {
				y = max(y, (a[j] * b[j + 1] - a[i]) / (a[i] + a[j]));
			}
		}
		printf("%.3lf\n", y);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/LOOKQAQ/article/details/81487781