专题一学习

easy 1:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    cout << 'L';
    while (n)
    {
        cout << 'o';
        n--;
    }
    cout << "ng";
    return 0;
}

这道题比较简单,简单考察循环的使用。

easy 2:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    while (n)
    {
        string s;
        cin >> s;
        if ((s[0] == 'Y' || s[0] == 'y') && (s[1] == 'E' || s[1] == 'e') && (s[2] == 's' || s[2] == 'S')) cout << "YES" << endl;
        else cout << "NO" << endl;
        n--;
    }
    return 0;
}

easy 3:

#include<iostream>

using namespace std;

int main()

{

        int n;

        cin>>n;

        while(n)

        {

                char s[61];//题目所给的数值范围大,需要用字符储存

                cin>>s;

                if((s[strlen(s)-1]-'0)%2==0) cout<<"even"<<endl;//根据字符末尾数字是否为偶数判断奇偶性

                else cout<<"odd"<<endl;

                n--;

        }

        return 0;

}

注意常见的数据类型的范围:

int:-1e9,1e9

long long:-1e18,1e18

mid 1:

#include <iostream>

using namespace std;

int main()
{
    int t;
    cin >> t;
    while (t)
    {
        int n, m,ans=0;//ans指最少需要再出几道题
        int cnt[7] = { 0 };//cnt数组用于记录给出的A到G等级的题型分别多少道,便于查找不够的题数的
        cin >> n >> m;
        string s;
        cin >> s;
        for (int i = 0; i < n; i++) cnt[s[i]-'A']++;
        for (auto i = 0; i <= 6; i++)
        {
            if (cnt[i] < m) ans += m - cnt[i];//遍历每道题型,计算出该道题型差的题数
        }
        cout << ans << endl;
        t--;
    }
    return 0;
}

mid 2:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n, m, k,p;
    cin >> n>>m>>k;
    vector<int> cnt(m);//分别储存每天有多少人遵守规则k
    for(int i=0;i<m;i++)
        for (int j = 0; j < n; j++)
        {
            cin >> p;
            if (p == k) cnt[i]++;
        }
    int ans=0;//符合民意的天数
    for (int i = 0; i < m; i++)
    {
        if (cnt[i] >= (n + 1) / 2) ans++;//规则符合民意
    }
    if (ans >= (m + 1) / 2) cout << "YES";//规则是否正确
    else cout << "NO";
    
    return 0;
}

注意:定义普通数组时,数组长度不可用变量名代替,而用vector储存数组时可以。

hard 1:

#include <iostream>
#include <vector>

using namespace std;

struct S
{
    char k, b;
};//储存每次操作的具体信息

int main()
{
    int n,q;
    string s;
    char f[26];//储存26个字母经过q次操作后对应的数字
    cin >> n >> s >> q;
    vector<S> v(q);//储存所有操作
    for (int i = 0; i < q; i++)
    {
        cin >> v[i].k >> v[i].b;
    }
    char c;
    for (auto ch = 'a'; ch <= 'z'; ch++)
    {
        c = ch;
        for (int i = 0; i < q; i++)//通过q步改变每个字母
        {
            if (c == v[i].k) c = v[i].b;
        }
        f[ch - 'a'] = c;//赋值
    }
    for (int i = 0; i < s.size(); i++) cout << f[s[i] - 'a'];//通过f把对应的s中的字符一个个找出来
    
    return 0;
}

注意:结构体储存每步操作,方便查找对应操作的字母和操作

hard 2:

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

const int N = 1e3 + 6;

int a[N][N], ans[N][N];//数组a储存原始数据表,ans储存最终的
int xx[N], yy[N];//分别对应行,列前的序号,便于直接查找原始数据表

int main()
{
    int n,m;
    cin >> n>>m;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
            cin >> a[i][j];
    }
    for (int i = 1; i <= n; i++) xx[i] = yy[i] = i;//给行列序号赋初始值
    while (m)
    {
        int op, x, y;
        cin >> op >> x >> y;
        if (op) swap(xx[x], xx[y]);//op=1,交换行
        else swap(yy[x], yy[y]);//op=2,交换列
        m--;
    }
    for(int i=1;i<=n;i++)
        for (int j = 1; j <= n; j++)
        {
            ans[i][j] = a[xx[i]][yy[j]];//ans分别对应a中数据
        }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cout << ans[i][j]<<' ';
        }
        cout << endl;
    }
    return 0;
}

通过交换行列的序号达到交换行列的目的,从交换多个数字转化为每次交换两个数字,避免超时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值