1. 程式人生 > >牛客國慶集訓派對Day4 A思維 D思維 G公式,規律 I 組合 J模擬

牛客國慶集訓派對Day4 A思維 D思維 G公式,規律 I 組合 J模擬

A

Code:

#include <bits/stdc++.h>
#define LL long long 
using namespace std;
int main(){	
	double n ;
	cin >> n ; 
	printf("%.6lf\n",n);
	return 0 ; 
}

D 思路:按照Kruscal演算法的思路,排序,然後最小的相加。 Code:

#include <bits/stdc++.h>
#define LL long long 
using namespace std;
const int AX = 1e6 + 66 ;
int
a[AX]; int main(){ int n ; cin >> n ; for( int i = 1 ; i <= n ; i++ ){ cin >> a[i] ; } sort( a + 1 , a + n + 1 ) ; LL res = 0 ; for( int i = 2 ; i <= n ; i++ ){ res += ( a[1] + a[i] ) ; } cout << res << endl; return 0 ; }

G 思路:沒推公式,只是找了規律,整個式子其實就是求所有區間的和乘以w[區間長度] ,然後我們考慮相同區間長度i,發現加到最後前i-1個數依次加了1,2,3…i-1次,後i-1個數也是如此,中間的數都加了i次。 那麼預處理出字首和,以及各項與所在位置的乘積即可。 Code:

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int AX = 3e5 + 66 ;
const LL MOD = 1e9 + 7 ;
LL a[AX];
LL w[AX];
LL sum1[AX];
LL f[AX];
LL g[AX];
int main(){
	LL n ;
	cin >> n ;
	for( int i = 1 ; i <= n ; i++ ){
		cin >> a[i] ; 
	}
	for( int i = 1 ; i <=
n ; i++ ){ cin >> w[i] ; } for( int i = 1 ; i <= n ; i++ ){ sum1[i] = sum1[i-1] + a[i] ; sum1[i] %= MOD ; } for( int i = 1 ; i <= n ; i++ ){ f[i] = f[i-1] + 1LL * i * a[i] % MOD ; f[i] %= MOD ; } for( int i = n ; i >= 1 ; i-- ){ g[i] = g[i+1] + 1LL * ( n - i + 1 ) * a[i] % MOD ; g[i] %= MOD; } LL res = 0LL; for( int i = 1 ; i <= n ; i++ ){ res += ( 1LL * i * ( ( sum1[n-i+1] + MOD - sum1[i-1] ) % MOD ) % MOD + f[i-1] %MOD + g[n-i+2] % MOD ) * 1LL * w[i] % MOD ; res %= MOD ; } cout << res % MOD << endl; return 0 ; }

I 思路:一個根節點連線n條鏈,每條單獨的聯通子樹為( x + 1 ) * x / 2 各個鏈之間一直累乘x+1. Code:

#include <bits/stdc++.h>
#define LL long long 
using namespace std;
const int MOD = 998244353;
int main(){
    int n ;
    cin >> n ; 
    LL x ; 
    LL ans2 = 0LL;
    LL ans1 = 1LL;
    for( int i = 0 ; i < n ; i++ ){
        cin >> x;
        ans1 *= ( x + 1 );
        ans1 %= MOD ;
        ans2 += 1LL*(x+1)*x/2LL ;
        ans2 %= MOD ;
    }
    cout << ( ans1 + ans2 ) % MOD << endl;
}

J 關鍵點:復讀機全都是復讀。。 Code:

#include <bits/stdc++.h>
#define LL long long 
using namespace std;
const int AX = 1e3 + 66 ;
int mark[AX] ;
int main(){	
	int n , m ;
	cin >> n >> m ; 
	string s[2] ; 
	int cur = 0 ;
	int id ; 
	for( int i = 1 ; i <= n ; i++ ) mark[i] = 1 ;
	for( int i = 0 ; i < m ; i++ ){
		cin >> id >> s[cur] ; 
		if( !i ) { mark[id] = 0 ; cur = !cur ; continue; }
		if( s[cur] != s[!cur] ) mark[id] = 0 ; 
		cur = !cur ; 
	}
	for( int i = 1 ; i <= n ; i++ ){
		if( mark[i] ) cout << i << ' '; 
	}cout << endl;
	return 0 ; 
}