Submission #20672

#TimeUsernameProblemLanguageResultExecution timeMemory
20672우리OJ (#35)복불복 (OJUZ11_luck)C++14
22 / 100
3 ms2024 KiB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <math.h>
#include <assert.h>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <algorithm>
#include <iostream>
#include <functional>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <bitset>

using namespace std;
typedef pair<int, int> Pi;
typedef long long ll;
#define pii Pi
#define pll PL
#define Fi first
#define Se second
#define pb(x) push_back(x)
#define sz(x) ((int)(x).size())
#define rep(i, n) for(int i=0;i<n;i++)
#define all(x) (x).begin(), (x).end()
typedef tuple<int, int, int> t3;
typedef pair<ll, ll> PL;

int n, k;
int A[110], B[110];

const int MOD = 1e9 + 7;

void subtask_1(){
	int p[8] = {}, ans = 0;
	rep(i, n)p[i] = i;
	do{
		int aa = 1e9, bb = 0;
		rep(i, n){
			if(i < k)aa = min(aa, A[i] + B[p[i]]);
			else bb = max(bb, A[i] + B[p[i]]);
		}
		if(aa >= bb)ans++;
	}while(next_permutation(p, p+n));
	printf("%d\n", ans);
}

void subtask_2(){
	ll ans = 0;
	for(int i=0;i<n;i++){
		int aa = A[0] + B[i];
		int v[110] = {};
		for(int j=1;j<n;j++){
			int c = 0;
			for(int k=0;k<n;k++)if(i != k && B[k] + A[j] <= aa)++c;
			for(int k=1;k<=c;k++)v[k]++;
		}
		ll now = 1;
		for(int j=n-1;j;j--){
			now = now * v[j] % MOD;
			for(int k=j;k;k--)v[k]--;
		}
		ans = (ans + now) % MOD;
	}
	printf("%lld\n", ans);
}

void solve(){
	scanf("%d%d", &n, &k);
	rep(i, n)scanf("%d", A+i);
	rep(i, n)scanf("%d", B+i);
	sort(A, A+n); reverse(A, A+n);
	sort(B, B+n); reverse(B, B+n);
	if(n <= 8){
		subtask_1();
		return;
	}
	if(k == 1){
		subtask_2();
	}
	else return;
}

int main(){
	int Tc = 1; //scanf("%d", &Tc);
	for(int tc=1;tc<=Tc;tc++){
		//printf("Case #%d: ", tc);
		solve();
	}
	return 0;
}

Compilation message (stderr)

luck.cpp: In function 'void solve()':
luck.cpp:73:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &k);
                       ^
luck.cpp:74:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  rep(i, n)scanf("%d", A+i);
                           ^
luck.cpp:75:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  rep(i, n)scanf("%d", B+i);
                           ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...