【LGR-196-Div.4】洛谷入门赛 #26(A~H)

 入门赛题目比较简单,直接贴代码~~

contest链接:https://www.luogu.com.cn/contest/188303


目录

A题

B题

C题

D题

E题

F题

G题

H题


A题

  A要注意的是2016年8月也算一个月,记得加上--

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 1e5 + 10;
void solve()
{
     int ans ; 
     int n,m;
     cin >> n >> m;
     if(m >= 8) ans = (n - 2016) * 12 + (m - 8) + 1;
     else ans =  (n - 2016 - 1) * 12 + 5 + m;
     cout << ans << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

B题

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 1e5 + 10;
void solve()
{
     int a,b,c;
     int a1,b1,c1;
     cin >> a >> b >> c >> a1 >> b1 >> c1;
     if(a > a1) cout << "A" << endl;
     if(a1 > a) cout << "B" << endl;
     if(a == a1 && b > b1) cout << "A" << endl;
     if(a == a1 && b1 > b) cout << "B" << endl;
     if(a == a1 && b == b1 && c > c1) cout << "A" << endl;
     if(a == a1 && b == b1 && c1 > c) cout << "B" << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

C题

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 2e5 + 10;
int a[N],b[N];
int sum1 = 0;
int sum2 = 0;
void solve()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) 
    {
        cin >> a[i];
        sum1 += a[i];
    }
    for(int i = 0; i < n; i++) 
    {
      cin >> b[i];
      sum2 += b[i];
    }
    cout << ceil((sum1+sum2)*1.0/2.0) << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

D题

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 1e5 + 10;
int flag = 0;
int sum = 0;
void solve()
{
    int n,m,a,b;
    cin >> n >> m >> a >> b;
    while(m--)
    {
        int k;
        cin >> k;
        vector<int> arr(k+1);
        for(int i = 1; i <= k; i++) cin >> arr[i];
        for(int j = 1; j <= k; j++)
        {
            if(arr[j] == a)   flag = 1;
            if(flag == 1 && arr[j] == b) flag = 2;
        }
        if(flag == 2) sum ++;
    }
    cout << sum << endl;
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

E题

   set记录去重一下

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 1e5 + 10;
set<int> st;
int a[N];
void solve()
{
     int n,t;
     cin >> n >> t;
     for(int i = 1; i <= n; i++) cin >> a[i];
     int m = pow(10,t);
     for(int i = 1; i <= n; i++) st.insert(a[i] % m);
     cout << st.size() << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

F题

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 1e3 + 10;
int a[N];
vector<int> b[N];
void solve()
{
     int n,m;
     cin >> n >> m;
     int t = n / m ;
     for(int i = 1; i <= n; i++)
     {
         cin >> a[i];
         b[a[i]].push_back(i); 
     }
    for(int i = 1; i <= t; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            cout << b[j][i-1] << endl;
        }
    }
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

G题

substr找到friend,并把首字母放入vector中,若两个friend中间差了三个字母及以上,就必须操作两次,否则只需操作一次执行两次i++跳过第二个friend~~~

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 1e5 + 10;
vector<int> b;
void solve()
{
     string str;
     cin >> str;
     for(int i = 0; i < str.size() - 5; i++)
     {
          if(str.substr(i,6) == "friend") b.push_back(i);
     }
     int ans = 0;
     for(int i = 0; i < b.size(); i++)
     {
        ans ++ ;
        if(i < b.size()&&b[i+1] - b[i] < 9) i++;
     }
     cout << ans << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

H题

  开个三维vector数组,方便调STL库的erase销毁数据,然后按题意模拟。

  三维数组:vector<vector<vector<int>>>  g(110,vector<vector<int>>(110,vector<int>()));

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_map>
#include<unordered_set>
#include<climits>
#define int long long 
#define x first 
#define y second 
using namespace std;
const int N = 1e5 + 10;
const int INF = INT_MAX;
vector<vector<vector<int>>>  g(110,vector<vector<int>>(110,vector<int>()));//三维数组
void solve()
{
     int n,m,k,t;
     cin >> n >> m >> k >> t;
     while(t -- )
     {
        int a,x1,y1;
        cin >> a >> x1 >> y1;
        if(g[x1][y1].empty()||g[x1][y1].size() < k)
        {
            g[x1][y1].push_back(a);
            cout << "-1" << endl;
        }
        else   
        {
            int c = INF;
            for(int i = k - 1; i >= 0; i--)
            {
                if(c > g[x1][y1][i]) c = g[x1][y1][i];
            }
            for(int i = k - 1; i >= 0; i--)//越往上的日记本越在数组里面,所以倒着遍历找最小值
            {
                if(c == g[x1][y1][i]) 
                {
                    cout << c << " " << k - i - 1 <<  endl;//输出编号以及移动日记本数目
                    g[x1][y1].erase(g[x1][y1].begin() + i);
                    break;//防止编号相同的继续被销毁
                }
            }
            g[x1][y1].push_back(a);
        }
     }     
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t--) solve();
    return 0;
}

OK,结束~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值