2020.2.19 大一寒假训练十二(vector)

Problem A:NEFU1675 中间数

模板题。

//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
vector<long long> a;
int main()
{
    ios::sync_with_stdio(false);
    long long x;
    while(cin>>x && x)
        a.push_back(x);
    int n=a.size();
    (a.size()&1)?cout<<a[(n-1)/2]:cout<<a[(n-1)/2]+a[n/2];
    return 0;
}

一开始把(n-1)/2写成n-1/2(忘记括号),怎么改怎么错,发现问题之后我人都傻了。

Problem B:NEFU2128 锯齿矩阵

多组输入注意vector的清空。

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
vector<int> a[10010];
int main()
{
    ios::sync_with_stdio(false);
    int n, m, x, y;
    while(~scanf("%d%d", &n, &m))
    {
        //a.clear();
        for(int i=1; i<=m; i++)
        {
            //cin>>x>>y;
            scanf("%d%d", &x, &y);
            a[x].push_back(y);
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=0; j<a[i].size(); j++)
                (j==a[i].size()-1)?printf("%d", a[i][j]):printf("%d ", a[i][j]);
            a[i].clear();
            printf("\n");
        }
    }
    return 0;
}

Problem C:NEFU2129 小明堆积木

多组输入注意vector的清空。

//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
vector<int> jm[100010];
int n, m, a, b;
int main()
{
    //ios::sync_with_stdio(false);
    while(~scanf("%d%d", &n, &m))
    {
        //jm[].clear();
        for(int i=1; i<=n; i++)
            jm[i].push_back(i);
        for(int i=1; i<=m; i++)
        {
            scanf("%d%d", &a, &b);
            //for(int j=0; j<jm[b].size(); j++)
            if(a==b || jm[b].size()==0) continue;
            for(int j=0; j<jm[b].size(); j++)
                jm[a].push_back(jm[b][j]);
            jm[b].clear();
        }
        for(int i=1; i<=n; i++)
        {
            if(!jm[i].size()) printf("-1");
            else
            {
                printf("%d", jm[i][0]);
                for(int j=1; j<jm[i].size(); j++)
                    printf(" %d", jm[i][j]);
            }
            printf("\n");
            jm[i].clear();
        }
    }
    return 0;
}

Problem D:NEFU1676 上网统计

//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
vector<string> web[1010];
string usern, websi;
int n, m;
int main()
{
    //ios::sync_with_stdio(false);
    scanf("%d%d", &n, &m);
    int cnt=0;
    for(int i=1; i<=m; i++)
    {
        int tmp=0;
        cin>>usern>>websi;
        for(int j=1; j<=cnt; j++)
            if(web[j].front()==usern) tmp=j;
        if(tmp) web[tmp].push_back(websi);
        else
        {
            cnt++;
            web[cnt].push_back(usern);
            web[cnt].push_back(websi);
        }
    }
    for(int i=1; i<=cnt; i++)
    {
        for(int j=0; j<web[i].size()-1; j++)
            cout<<web[i][j]<<" ";
        cout<<web[i][web[i].size()-1];
        cout<<endl;
    }
    return 0;
}


Problem E:NEFU2127 圆桌问题

进行游戏模拟,如果当前位置会被处刑,则在此位置安放坏人即可。

//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
vector<int> table;
int n, m, N;
bool vis[20010];
int main()
{
    //ios::sync_with_stdio(false);
    while(~scanf("%d%d", &n, &m))
    {
        memset(vis, 0, sizeof(vis)); // 赋初值为0:好人
        N = n*2;
        table.clear();
        bool flag = 0;
        int pos = 1; // pos为圆桌上的位置,比下标大1
        for(int i=1; i<=N; i++)
            table.push_back(i);
        while(N > n)
        {
            pos += m-1; // 移步至倒霉的人
            if(pos>N) // 超出
            {
                pos %= N; // 取模,回到范围内
                if(!pos) // 人数的倍数
                    pos = N;
            }
            vis[table[pos-1]] = 1; // 这位置为坏人
            table.erase(table.begin()+pos-1); // 坏人倒霉
            if(pos == N) // 本次寻找结束
                pos = 1; // 回到第一个人
            N--; // 出局了一个人
        }
        for(int i=1; i<=n*2; i++)
            vis[i]?printf("B"):printf("G");
        printf("\n");
    }
    return 0;
}

Problem F:NEFU2124 钻石收集者

诶话说我这题没用vector啊。。。

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
int n, k, jw[1000010],t[1000010];
//vector<int> a;
int main()
{
    ios::sync_with_stdio(false);
    scanf("%d%d", &n, &k);
    for(int i=1; i<=n; i++)
        scanf("%d", &jw[i]);
    stable_sort(jw+1, jw+n+1);
    int tmp=n;
    for(int i=n; i>=1; i--)
    {
        while(jw[tmp]>jw[i]+k) tmp--;
        //a.push_back(tmp-i+1);
        t[i] = max(t[i+1], tmp-i+1);
    }
    printf("%d\n", t[1]);
    return 0;
}

贴友链:https://blog.csdn.net/ljw_study_in_CSDN/article/details/86478604?utm_source=app

附:彩蛋
文末彩蛋

发布了58 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_41248654/article/details/104392392
今日推荐