(本部2定格)教育Codeforcesラウンド79

試験のリンク

https://codeforces.com/contest/1279

A.新年ガーランド

赤、緑、青の光は、同じ色は、彼がリンクすることができれば、隣接求められることはできません
が点灯し、選択した色を、そして-1他のライトの最小値が存在しなければならない、ライトは間隔

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define cin(a) scanf("%d",&a)
#define pii pair<int,int>
#define ll long long
#define gcd __gcd
const int inf = 0x3f3f3f3f;
const int maxn = 200100;
const int M = 1e9+7;
int n,m,k,t;
int a[4];
 
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("data.in", "r", stdin);
    //freopen("data.out", "w", stdout);
#endif
    cin(t);
    while(t--)
    {
        cin>>a[0]>>a[1]>>a[2];
        sort(a,a+3);
        if(a[0]+a[1] >= a[2]-1)
        {
            puts("YES");
        }
        else puts("NO");
    }
    return 0;
}

B.詩のためにサンタ

暗唱詩、S秒の合計にするために、あなたが暗唱一度スキップすることができ、暗唱は、より全体の暗唱することができますどのような時間をスキップするように頼ま
のようなシミュレーションを見て、そして時間がs以上である、マイナス前の最長とき暗記は、以下のより、それはより一般的な暗唱することができています

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define cin(a) scanf("%d",&a)
#define pii pair<int,int>
#define ll long long
#define gcd __gcd
const int inf = 0x3f3f3f3f;
const int maxn = 100100;
const int M = 1e9+7;
int n,s,t;
 
int a[maxn];
 
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("data.in", "r", stdin);
    //freopen("data.out", "w", stdout);
#endif
    cin(t);
    while(t--)
    {
        cin(n);cin(s);
        for(int i = 0; i < n; i++) 
        {
            cin(a[i]);
        }
        ll sum = 0;
        ll idx = 0;
        ll mx = 0;
        for(int i = 0; i < n; i++) 
        {
            sum += a[i];
            if(a[i] > mx)
            {
                mx = a[i];
                idx = i;
            }
            if(sum > s)
            {
                if(sum-mx > s) idx = -1;
                else break;
            }
        }
        if(sum <= s) idx = -1;
        printf("%d\n",idx+1);
    }
    return 0;
}

プレゼントのC.スタック

シミュレーション

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define cin(a) scanf("%d",&a)
#define pii pair<int,int>
#define ll long long
#define gcd __gcd
const int inf = 0x3f3f3f3f;
const int maxn = 100100;
const int M = 1e9+7;
int n,m,t;
 
int a[maxn];
int b[maxn];
bool vis[maxn];
 
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("data.in", "r", stdin);
    //freopen("data.out", "w", stdout);
#endif
    cin>>t;
    while(t--)
    {   
        mem(vis,0);
        cin>>n>>m;
        for(int i = 0; i < n; i++) 
        {
            cin>>a[i];
        }
        for(int i = 0; i < m; i++) 
        {
            cin>>b[i];
        }
        ll ans = 0;
        int j = 0, i = 0;
        
        for(; i < m; i++) 
        {   
            //cout<<ans<<' ';
            if(vis[b[i]]) ans++;
            else
            {
                for(; j < n; j++)
                {   
                    vis[a[j]] = 1;
                    if(a[j] == b[i])
                    {   
                        ans += ((j-i)*2+1);
                        break;
                    }
                }
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

D.サンタさんのボット

すなわちの正しい動作の確率見つけ、人のxの選挙の前に、この人のKiは内部Yを選出した後、ランダムにこのyが、その後、正しい操作であるzの必要がある場合は、1つのzに割り当てられて
正直に、英語のTMDはあまりにも重要ですそれがために、私はケースを取得する
あなたは贈り物を選択した場合は最初の番、2人1を選択するだけで2に割り当てることができ、確率\(1/2 * 1/2 * 1/2 = 1/8 \)
を選択した場合1号贈り物は、1に割り当てることができ、確率\(1/2 * 1/2 * 1/4 = 1 \)
その後、人物2を選択し、1番のみ贈り物を選ぶことができ、割り当てることができる1に、確率\ (* 1 * 1 1/2 = 1/2 \)
全体的な確率ので\(7/8 \)

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define cin(a) scanf("%d",&a)
#define pii pair<int,int>
#define ll long long
#define gcd __gcd
const int inf = 0x3f3f3f3f;
const int maxn = 1001000;
const int M = 998244353;

ll ksm(ll a,ll b)
{
    ll res = 1;
    while (b)
    {
        if(b&1) res = (res*a)%M;
        a = (a*a)%M;
        b /= 2;
    }
    return res%M;
}


vector<int> a[maxn];
int b[maxn];

int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("data.in", "r", stdin);
    //freopen("data.out", "w", stdout);
#endif
    ll n,k;
    cin>>n;
    int sum = 0;
    for(int i = 0; i < n; i++) 
    {
        cin>>k;
        for(int j = 0,x; j < k; j++) 
        {
            cin>>x;
            sum++;
            a[i].push_back(x);
            b[x]++;
        }
    }
    ll nn = ksm(n,M-2);
    ll ans = 0;
    for(int i = 0; i < n; i++) 
    {
        ll res = 0;
        ll x = a[i].size();
        x = ksm(x,M-2);
        for(auto j : a[i])
        {
            res = (res + ((x*b[j])%M*nn)%M)%M;
        }
        ans = (ans+res)%M;
    }
    ans = (ans*nn)%M;
    cout<<ans<<endl;
    return 0;
}

おすすめ

転載: www.cnblogs.com/hezongdnf/p/12110227.html