1. 程式人生 > >ZOJ Monthly, March 2018

ZOJ Monthly, March 2018

about frame cat sort exactly mov divide take mit

Easy Number Game

Time Limit: 2 Seconds Memory Limit: 65536 KB

The bored BaoBao is playing a number game. In the beginning, there are numbers. For each turn, BaoBao will take out two numbers from the remaining numbers, and calculate the product of them.

Now, BaoBao is curious to know the minimum sum of the products if he plays at least

turns. Can you tell him?

Input

The first line of input contains a positive integer (about 30), the number of test cases. For each test case:

The first line contains two integers and (, ). Their meanings are described above.

The second line contains integers (), indicating the numbers.

Output

For each test case output one integer, indicating the minimum sum of the products.

Sample Input

3
4 2
1 3 2 4
3 1
2 3 1
4 0
1 3 2 4

Sample Output

10
2
0

Hint

For the first sample test case, the answer is 1 × 4 + 3 × 2 = 10.

For the second sample test case, the answer is 2 × 1 = 2.

n個數找m組數,使乘積的和最小

讓前m小最大和最小的相乘就好了

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N]; int main() { int T; cin>>T; while(T--) { int n,m; cin>>n>>m; for(int i=0; i<n; i++) cin>>a[i]; sort(a,a+n); int r=2*m-1; long long s=0; for(int i=0; i<m; i++) s+=a[i]*a[r-i]; cout<<s<<endl; } }
Super Brain

Time Limit: 1 Second Memory Limit: 65536 KB

Super Brain is a famous scientific reality and talent show aiming to find people with exceptional brainpower.

In one of the challenges, two integer sequences and of length are given to the contestant. It‘s guaranteed that and hold for all , and there is exactly one integer in the first sequence which also appears in the second sequence. The contestant has to memorize the two sequences in a very short time, and find the integer which appears in both sequences correctly.

As a technical staff of the show, you are required to write a program and find out the correct integer.

Input

There are multiple test cases. The first line of the input contains an integer , indicating the number of test cases. For each test case:

The first line contains an integer (), indicating the length of the sequence.

The second line contains integers (), indicating the first sequence.

The third line contains integers (), indicating the second sequence.

It‘s guaranteed that and hold for all , and there is exactly one integer in the first sequence which also appears in the second sequence.

It‘s also guaranteed that the sum of over all test cases will not exceed .

Output

For each test case output one line containing one integer, indicating the integer which appears in both sequences.

Sample Input

3
3
3 1 2
5 3 4
2
38324 14122
38323 14122
1
180310
180310

Sample Output

3
14122
180310

我可能被卡常了,memset就過了
找到兩個數組唯一相同的
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N],n;
int main()
{
    ios::sync_with_stdio(false);
    int T;
    cin>>T;
    while(T--)
    {
        memset(a,0,sizeof a);
        cin>>n;
        int ans;
        for(int i=0,x; i<n; i++)cin>>x,a[x]++;
        for(int i=0,x; i<n; i++)
        {
            cin>>x;
            if(a[x])ans=x;
        }
        cout<<ans<<"\n";
    }
}
Happy Sequence

Time Limit: 3 Seconds Memory Limit: 65536 KB

A sequence of integers () is called a happy sequence if each number divides (without a remainder) the next number in the sequence. More formally, we can say for all , or we can say for all .

Given and , find the number of happy sequences of length . Two sequences and are different, if and only if there exists an such that and .

As the answer can be rather large print it modulo ().

Input

There are multiple test cases. The first line of the input contains an integer (about 50), indicating the number of test cases. For each test case:

The first and only line contains two integers and (), indicating the upper limit of the elements in the sequence and the length of the sequence.

Output

For each case output a single integer, indicating the number of happy sequences of length modulo

Sample Input

1
3 2

Sample Output

5

Hint

In the sample test case, the happy sequences are: ,?,?,?,?.

一個數組是按照倍數關系的

這個題利用埃篩的思想去枚舉i個數s*j作為最後一個元素就好

using namespace std;
typedef long long ll;
const ll MD=1e9+7;
const int N=2005;
ll dp[N][N];
int main()
{
    ios::sync_with_stdio(false);
    int T;
    cin>>T;
    while(T--)
    {
        int n,k;
        cin>>n>>k;
        memset(dp,0,sizeof dp);
        for(int i=1; i<N; i++) dp[1][i]=1;
        for(int i=1; i<k; i++)
            for(int j=1; j<=n; j++)
                for(int s=1; s*j<=n; s++)
                    dp[i+1][s*j]=(dp[i+1][s*j]+dp[i][j])%MD;
        ll sum=0;
        for(int i=1; i<=n; i++) sum=(sum+dp[k][i])%MD;
        cout<<(sum+MD)%MD<<endl;
    }
    return 0;
}
Travel along the Line

Time Limit: 1 Second Memory Limit: 65536 KB

BaoBao is traveling along a line with infinite length.

At the beginning of his trip, he is standing at position 0. At the beginning of each second, if he is standing at position , with probability he will move to position , with probability he will move to position , and with probability he will stay at position . Positions can be positive, 0, or negative.

DreamGrid, BaoBao‘s best friend, is waiting for him at position . BaoBao would like to meet DreamGrid at position after exactly seconds. Please help BaoBao calculate the probability he can get to position after exactly seconds.

It‘s easy to show that the answer can be represented as , where and are coprime integers, and is not divisible by . Please print the value of modulo , where is the multiplicative inverse of modulo .

Input

There are multiple test cases. The first line of the input contains an integer (about 10), indicating the number of test cases. For each test case:

The first and only line contains two integers and (). Their meanings are described above.

Output

For each test case output one integer, indicating the answer.

Sample Input

3
2 -2
0 0
0 1

Sample Output

562500004
1
0

1s分為2s,只要n+m挑對了就行了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MD=1e9+7;
const int N=2e5+5;
ll la(ll a,ll b)
{
    a%=MD;
    ll ans=1;
    while(b>0)
    {
        if(b&1)ans=ans*a%MD;
        b>>=1;
        a=a*a%MD;
    }
    return ans;
}
ll f[N],v[N],ans;
ll C(ll n,ll m)
{
    if(m<0||m>n) return 0;
    return f[n]*v[m]%MD*v[n-m]%MD;
}
int main()
{
    ios::sync_with_stdio(false);
    f[0]=1;
    for (ll i=1; i<N; i++) f[i]=f[i-1]*i%MD;
    v[N-1]=la(f[N-1],MD-2);
    for (ll i=N-2; i>=0; i--) v[i]=v[i+1]*(i+1LL)%MD;
    int T;
    cin>>T;
    while(T--)
    {
        int n,m;
        cin>>n>>m;
        ans=C(2*n,m+n)*la(la(2,2*n),MD-2)%MD;
        cout<<ans<<"\n";
    }
    return 0;
}


ZOJ Monthly, March 2018