PTA 中文题目题解合集

文章目录

1001 害死人不偿命的(3n+1)猜想

在这里插入图片描述

#include <cstdio>
using namespace std;
int main()
{
    
    
    int n;
    scanf("%d",&n);
    int step = 0;
    while(n != 1)
    {
    
    
        if(n&1) n = n*3 + 1;
        n >>= 1;
        step++;
    }
    printf("%d\n",step);
    return 0;
}

1002 写出这个数

在这里插入图片描述

#include <iostream>
#include <map>
using namespace std;
typedef long long ll;
string s;
char t[1007];
map<int,string> mp;
ll ans = 0;
void init()
{
    
    
    for(int i = 0; i <= 9; ++i)
    {
    
    
        if(i == 0) mp[i] = "ling";
        if(i == 1) mp[i] = "yi";
        if(i == 2) mp[i] = "er";
        if(i == 3) mp[i] = "san";
        if(i == 4) mp[i] = "si";
        if(i == 5) mp[i] = "wu";
        if(i == 6) mp[i] = "liu";
        if(i == 7) mp[i] = "qi";
        if(i == 8) mp[i] = "ba";
        if(i == 9) mp[i] = "jiu";
    }
}
int main()
{
    
    
    init();
    cin>>s;
    int len = s.size();
    for(int i = 0; i < len; i++)
        ans += s[i] - '0';
    int cnt = 0;
    while(ans)
    {
    
    
        t[cnt++] = ans%10 + '0';
        ans /= 10;
    }
    for(int i = cnt - 1; ~i; --i)
    {
    
    
        int x = t[i] - '0';
        if(i == cnt-1) cout<<mp[x];
        else cout<<" "<<mp[x];
    }
    cout<<'\n';
    return 0;
}

1003 我要通过!

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
string s;
int main()
{
    
    
    int t;
    cin>>t;
    while(t--)
    {
    
    
        cin>>s;
        int len = s.size();
        int pos1 = 0, pos2 = 0, okP = 0;
        for(int i = 0; i < len; ++i)
        {
    
    
            if(s[i] == 'P' && !okP) pos1 = i, okP = 1;
            if(s[i] == 'T' && okP == 1) pos2 = i, okP = 2;
        }
        
        if(okP != 2) cout<<"NO"<<'\n';
        else
        {
    
    
            int x = 0, y = 0, z = 0;
            for(int i = 0; i < pos1; ++i)
            {
    
    
                if(s[i] == 'A') x++;
                else 
                {
    
    
                    x = -0x3f3f3f3f;
                    break;
                }
            }
            for(int i = pos1 + 1; i < pos2; ++i)
            {
    
    
                if(s[i] == 'A') y++;
                else 
                {
    
    
                    y = 0;
                    break;
                }
            }
            for(int i = pos2 + 1; i < len; ++i)
            {
    
    
                if(s[i] == 'A') z++;
                else 
                {
    
    
                    z = 0;
                    break;
                }
            }
            if(!y || x*y != z) cout<<"NO"<<'\n';
            else cout<<"YES"<<'\n';
        }
    }
    return 0;
}

1004 成绩排名

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
struct node
{
    
    
    string name,id;
    int core;
    bool operator < (const node & t) const{
    
    
        return core < t.core;
    }
}a[1007];
int main()
{
    
    
    int n;
    cin>>n;
    for(int i = 0; i < n; ++i) cin>>a[i].name>>a[i].id>>a[i].core;
    sort(a,a+n);
    cout<<a[n-1].name<<" "<<a[n-1].id<<'\n';
    cout<<a[0].name<<" "<<a[0].id<<'\n';
    return 0;
}

1005 继续(3n+1)猜想

在这里插入图片描述
把 2 ~ 100 中运算过程中覆盖的数字求出来,用set存,开个标记数组,把输入的数从大向小找,如果 输入的数是出现在覆盖了的表中,然后标记一下,最后看哪些数没有被覆盖。

#include <cstdio>
#include <set>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e5 +  7;
int a[107];
set<int> st[100];
int vis[maxn];
int ans[107];
void init()
{
    
    
    for(int i = 2; i < 100; i++)
    {
    
    
        int t = i;
        while(t != 1)
        {
    
    
            if(t&1) t = t*3 + 1;
            t >>= 1;
            st[i].insert(t);
        }
    }
}
int main()
{
    
    
    init();
    int n;
    scanf("%d",&n);
    for(int i = 0; i < n; ++i) scanf("%d",&a[i]);
    sort(a,a+n);
    for(int i = n-1; i >= 0; --i)
    {
    
    
        for(int j = 0; j < n; ++j)
        {
    
    
            if(st[a[i]].find(a[j])!= st[a[i]].end()) vis[a[j]] = 1;
        }
    }
    int idx = 0;
    for(int i = 0; i < n; ++i)
        if(!vis[a[i]]) ans[idx++] = a[i];

    sort(ans,ans+idx);
    for(int i = idx-1; i >= 0; --i)
    {
    
    
        if(i == idx-1) printf("%d",ans[i]);
        else printf(" %d",ans[i]);
    }
    return 0;
}

1006 换个格式输出整数

在这里插入图片描述

#include <cstdio>
using namespace std;
int main()
{
    
    
    int n;
    scanf("%d\n",&n);
    int b,s,g;
    g = n%10;
    n/=10;
    s = n%10;
    n/=10;
    b = n;
    for(int i = 0; i < b; ++i) printf("B");
    for(int i = 0; i < s; ++i) printf("S");
    for(int i = 1; i <= g; ++i) printf("%d",i);
    return 0;
}

1007 素数对猜想

在这里插入图片描述
线性素数筛

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
bool st[maxn];
int primes[maxn],cnt = 0;
void Get_primes()
{
    
    
    for(int i = 2; i <= maxn; ++i)
    {
    
    
        if(!st[i]) primes[cnt++] = i;
        for(int j = 0; primes[j] <= maxn/i; ++j)
        {
    
    
            st[primes[j]*i] = true;
            if(i%primes[j] == 0) break;
        }
    }
}
int main()
{
    
    
    Get_primes();
    int n, cnt = 0;
    scanf("%d",&n);
    for(int i = 1; primes[i] <= n; i++)
        if(primes[i] - primes[i-1] == 2) cnt++;
    printf("%d\n",cnt);
    return 0;
}

1008 数组元素循环右移问题

在这里插入图片描述

#include <iostream>
using namespace std;
const int maxn = 110;
int a[maxn], b[maxn];
int n,m;
int main()
{
    
    
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++) scanf("%d",&a[i]);
    for(int i = 0; i < n; i++) b[(i+m)%n] = a[i];
    for(int i = 0; i < n; i++)
        if(!i) printf("%d",b[i]);
        else printf(" %d",b[i]);
    return 0;
}

1009 说反话

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main()
{
    
    
    string s="";
    getline(cin,s);

    for(int i = s.size()-1; i >= 0; --i)
    {
    
    
        string t = "";
        while(s[i] != ' ' && i >= 0)
        {
    
    
            t += s[i];
            --i;
        }
        for(int j = t.size()-1; j >= 0; --j) cout<<t[j];
        if(i>=0) cout<<" ";
    }
    return 0;
}

1010 一元多项式求导

在这里插入图片描述
g e t l i n e getline getline 读入然后去转换会莫名的 w a wa wa 掉一部分数据。

#include <iostream>
using namespace std;
int a[110],b[110];
int c[110],d[110];
int main()
{
    
    
    int cnt = 0;
    while(cin>>a[cnt]>>b[cnt])
    {
    
    
        if(b[cnt] == 0) break;
        cnt++;
    }
    int idx = 0;
    if(!cnt)
        cout<<"0 0"<<endl;
    else
    {
    
    
        for(int i = 0; i < cnt; ++i)
        {
    
    
            c[idx] = a[i]*b[i];
            d[idx++] = b[i] - 1;
        }
        for(int i = 0; i < idx; ++i)
            if(!i) cout<<c[i]<<" "<<d[i];
            else cout<<" "<<c[i]<< " "<<d[i];
        cout<<endl;
    }
    return 0;
}

1011 A+B 和 C

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
    
    
    long long a,b,c;
    int t;
    cin>>t;
    for(int i = 1; i <= t; i++)
    {
    
    
        cin>>a>>b>>c;
        cout<<"Case #"<<i<<": ";
        if(a+b > c) cout<<"true"<<'\n';
        else cout<<"false"<<'\n';
    }
    return 0;
}

1012 数字分类

在这里插入图片描述

#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
int a[1007], b[1007];
int main()
{
    
    
    int n;
    cin>>n;
    for(int i = 0; i < n; i++) cin>>a[i];
    int A = 0, B = 0, c = 0, d = 0, e = 0;
    int sum = 0,cnt = 0;
    for(int i = 0; i < n; ++i)
    {
    
    
        if(a[i]%5 == 0 && a[i]%2 == 0) A += a[i];
        if(a[i]%5 == 1) b[cnt++] = a[i];
        if(a[i]%5 == 2) c++;
        if(a[i]%5 == 3) d++, sum += a[i];
        if(a[i]%5 == 4) e = max(e,a[i]);
    }
    for(int i = 0; i < cnt; i+=2)
        B = B + b[i] - b[i+1];
    if(!A) cout<<"N ";
    else cout<<A<<" ";
    if(!cnt) cout<<"N ";
    else cout<<B<<" ";
    if(!c) cout<<"N ";
    else cout<<c<<" ";
    if(!d) cout<<"N ";
    else cout<<setiosflags(ios::fixed)<<setprecision(1)<<(double)sum/d<<" ";
    if(!e) cout<<"N";
    else cout<<e;
    return 0;
}

1013 数素数

在这里插入图片描述
素数线性筛法

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
const int maxn = 1e6 + 7;
bool st[maxn];
int cnt;
int primes[maxn];
void Get_primes()
{
    
    
    for(int i = 2; i <= maxn; ++i)
    {
    
    
        if(!st[i]) primes[cnt++] = i;
        for(int j = 0; primes[j] <= maxn/i; ++j)
        {
    
    
            st[primes[j]*i] = true;
            if(i%primes[j] == 0) break;
        }
    }
}
int main()
{
    
    
    Get_primes();
    int n,m;
    scanf(" %d%d",&n,&m);
    if(m > n) swap(m,n);
    int count = 0;
    /***
    int k = 0;
    for(int i = 2; i <= maxn; ++i) if(!st[i]) k++;
    printf("%d\n",k);
    ***/
    for(int i = m; i <= n; ++i)
    {
    
    
        count++;
        if(count == 1) printf("%d",primes[i-1]);
        else printf(" %d",primes[i-1]);
        if(count == 10) puts(""), count = 0;
    }
    return 0;
}

1014 福尔摩斯的约会

在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
string a,b,c,d;
map<char,string> mp;
map<char,int> S;
void init()
{
    
    
    mp['A'] = "MON"; mp['B'] = "TUE"; mp['C'] = "WED"; mp['D'] = "THU";
    mp['E'] = "FRI"; mp['F'] = "SAT"; mp['G'] = "SUN";

    char s = 'A', t = '0';
    for(int i = 0; i < 24; i++)
    {
    
    
        if(i < 10) S[t] = i, t++;
        if(i >= 10) S[s] = i, s++;
    }

}
int main()
{
    
    
    init();
    cin>>a>>b>>c>>d;

    int lena = a.size(), lenb = b.size(), lenc = c.size(), lend = d.size();
    int pos = 0, cnt = 0;
    int len1 = min(lena,lenb), len2 = min(lenc,lend);

    char x='0', y='0';
    for(int i = 0; i < len1; ++i)
    {
    
    
        if(a[i] == b[i] && a[i] >= 'A' && a[i] <= 'G' && !cnt) cnt++, x = a[i];
        else if(a[i] == b[i] && cnt == 1 && ((a[i] >= 'A' && a[i] <= 'N')|| (a[i] >= '0' && a[i] <= '9')) ) y = a[i],cnt++;
        if(cnt == 2) i = len1;
    }
    for(int i = 0; i < len2; ++i)
         if(c[i] == d[i] && ((c[i] >= 'a' && c[i] <= 'z') || (c[i] >= 'A' && c[i] <= 'Z'))) pos = i, i = len2;

    cout<<mp[x]<<" ";
    if(S[y] < 10) cout<<"0"<<S[y]<<":";
    else cout<<S[y]<<":";
    if(pos < 10) cout<<"0"<<pos<<'\n';
    else cout<<pos<<'\n';
    return 0;
}

1015 德才论

在这里插入图片描述

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
struct node{
    
    
    int id,d,c;
    bool operator < (const node &t) const{
    
    
        if(d+c != t.d + t.c) return (d+c) > (t.d+t.c);
        if(d != t.d) return d > t.d;
        return id < t.id;
    }
};
node a[maxn];
vector<node>v[5];
int main()
{
    
    
    int n,h,l,cnt = 0;
    scanf("%d%d%d",&n,&l,&h);
    for(int i = 0; i < n; ++i)
    {
    
    
        scanf("%d%d%d",&a[i].id,&a[i].d,&a[i].c);
        if(a[i].d >= l && a[i].c >=l) cnt++;
        if(a[i].d < l || a[i].c < l) continue;
        else if(a[i].d >= h && a[i].c >= h) v[0].push_back(a[i]);
        else if(a[i].c < h && a[i].d >= h) v[1].push_back(a[i]);
        else if(a[i].d < h && a[i].c < h && a[i].d >= a[i].c) v[2].push_back(a[i]);
        else v[3].push_back(a[i]);
    }
    printf("%d\n",cnt);
    for(int i = 0; i < 4; ++i)
    {
    
    
        sort(v[i].begin(),v[i].end());
        for(auto it : v[i]) printf("%d %d %d\n",it.id,it.d,it.c);
    }
    return 0;
}

1016 部分A+B

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int work(ll x, int y)
{
    
    
    int a[10] = {
    
    0};
    while(x)
    {
    
    
        int t = x%10;
        a[t]++;
        x /= 10;
    }
    return a[y];
}
int change(int x,int num)
{
    
    
    if(!num) return 0;
    int t = x;
    for(int i = 1; i < num; ++i)
        x = x*10 + t;
    return x;
}
int main()
{
    
    
    ll A,B; int x,y;
    cin>>A>>x>>B>>y;
    int ansx = work(A,x), ansy = work(B,y);

    int xx = change(x,ansx), yy = change(y,ansy);
    ll ans = (ll)(xx + yy);
    cout<<ans<<'\n';
    return 0;
}

1017 A除以B

在这里插入图片描述

#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int>v;
int main()
{
    
    
    string s; int t;
    cin>>s>>t;
    int len = s.size();
    int temp = 0, yu = 0;
    for(int i = 0; i < len; ++i)
    {
    
    
        temp = temp*10 + s[i] - '0';
        int x = temp/t;
        temp %= t;
        v.push_back(x);
        if(i == len-1) yu = temp;
    }
    int pos = 0;
    if(!v[0] && v.size() > 1) pos++;
    for(int i = pos; i < v.size(); ++i) cout<<v[i];
    cout<<" "<<yu<<'\n';
    return 0;
}

1018 锤子剪刀布

在这里插入图片描述
输入样例

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

输出样例

5 3 2
2 3 5
B B
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
vector<char>a,b;
int s[4],t[4];
int main()
{
    
    
    int n;
    scanf("%d",&n);
    for(int i = 0; i < n; ++i) 
    {
    
    
        char x,y;
        scanf(" %c %c",&x,&y);

        if(x == y) s[1]++,t[1]++;
        else
        {
    
    
            if((x == 'C' && y == 'J')||(x == 'J' && y == 'B') || (x == 'B' && y == 'C')) 
                s[0]++,t[2]++,a.push_back(x);
            if((x == 'C' && y == 'B')||(x == 'J' && y == 'C') || (x == 'B' && y == 'J')) 
                t[0]++,s[2]++,b.push_back(y);
        }
        
    }
    for(int i = 0; i < 3; i++)
        if(!i) printf("%d",s[i]);
        else printf(" %d",s[i]);
    puts("");
    for(int i = 0; i < 3; i++)
        if(!i) printf("%d",t[i]);
        else printf(" %d",t[i]);
    puts("");

    int bb1 = 0, bb2 = 0, cc1 = 0, cc2 = 0, jj1 = 0, jj2 = 0;
    for(auto &i : a)
    {
    
    
        if(i == 'B') bb1++;
        if(i == 'C') cc1++;
        if(i == 'J') jj1++;
    }
    for(auto &i : b)
    {
    
    
        if(i == 'B') bb2++;
        if(i == 'C') cc2++;
        if(i == 'J') jj2++;
    }
    
    if(bb1 >= cc1 && bb1 >= jj1) cout<<"B";
    else if(cc1 > bb1 && cc1 >= jj1) cout<<"C";
    else if(jj1 > bb1 && jj1 > cc1) cout<<"J";
    cout<<" ";
    if(bb2 >= cc2 && bb2 >= jj2) cout<<"B";
    else if(cc2 > bb2 && cc2 >= jj2) cout<<"C";
    else if(jj2 > bb2 && jj2 > cc2) cout<<"J";
    cout<<'\n';
    return 0;
}

1019 数字黑洞

在这里插入图片描述

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[4];
string changex(string x)
{
    
    
    for(int i = 0; i < 4; i++)
        a[i] = (int)(x[i] - '0');
    sort(a,a+4);
    string ans = "";
    for(int i = 0; i < 4; ++i) ans += char(a[i]+'0');
    return ans;
}

string changed(string x)
{
    
    
     for(int i = 0; i < 4; i++)
        a[i] = x[i] - '0';
    sort(a,a+4);
    string ans = "";
    for(int i = 3; ~i; --i) ans += char(a[i] + '0');
    return ans;
}

string cal(string x, string y)
{
    
    
    int ok = 0;
    string ans = "";
    for(int i = 3; ~i; --i)
    {
    
    
        int t1 = x[i] - '0', t2 = y[i] - '0';
        if(ok) t1--, ok = 0;
        if(t1 - t2 < 0) ok = 1;
        if(ok) ans += char(t1+10 - t2 +  + '0');
        else ans += char(t1 - t2 + '0');
    }
    reverse(ans.begin(),ans.end());
    return ans;
}

int main()
{
    
    
    int n;
    cin>>n;
    string nn = "";
    while(n)
    {
    
    
        int t = n%10;
        nn += char(t + '0');
        n /= 10;
    }
    int num = nn.size();
    if(num < 4)
        for(int i = 0; i < 4 -num; ++i) nn += "0";
    string x = changed(nn), y = changex(nn);

    if(x == y) cout<<x<<" - "<<y<<" = "<<"0000"<<'\n';
    else
    {
    
    
        string t="";
        while(cal(x,y)!= "6174")
        {
    
    
            t = cal(x,y);
            cout<<x<<" - "<<y<<" = "<<t<<'\n';
            x = changed(t), y = changex(t);
        }
        cout<<x<<" - "<<y<<" = "<<"6174"<<'\n';
    }

    return 0;
}

1020 月饼

在这里插入图片描述

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
double x[1007],y[1007];
struct node{
    
    
    double a,b;
    bool operator < (const node &t)const{
    
    
        return b/a > t.b/t.a;
    }
}tot[1007];

int main()
{
    
    
    int n,sum;
    cin>>n>>sum;
    for(int i = 0; i < n; i++) cin>>x[i];
    for(int i = 0; i < n; i++) cin>>y[i];
    for(int i = 0; i < n; i++) tot[i].a = x[i], tot[i].b = y[i];
    sort(tot,tot+n);
    double ans = 0;
    for(int i = 0; i < n && sum > 0; ++i)
    {
    
    
        if(tot[i].a <= sum) ans += tot[i].b, sum -= tot[i].a;
        else ans += tot[i].b/tot[i].a*sum, sum = 0;
    }
    printf("%.2f\n",ans);
    return 0;
}

1021 个位数统计

在这里插入图片描述

#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int a[10];
int main()
{
    
    
    string s;
    cin>>s;
    for(int i = 0; i < s.size(); ++i)
    {
    
    
        int t = s[i] - '0';
        a[t]++;
    }
    for(int i = 0; i <= 9; i++)
        if(a[i]) cout<<i<<":"<<a[i]<<'\n';
    return 0;
}

D进制的A+B

在这里插入图片描述

#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    
    
    string s = "";
    long long a,b,c;
    cin>>a>>b>>c;
    long long t = a+b;
    if(!t) cout<<0<<'\n';
    else
    {
    
    
        while(t > 0)
        {
    
    
            long long temp = t%c;
            s += (char)(temp+'0');
            t /= c;
        }
        reverse(s.begin(),s.end());
        cout<<s<<'\n';
    }
    return 0;
}

1023 组个最小数

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
int a[60],b[107];
int main()
{
    
    
    int idx = 0,x;
    while(cin>>x) a[idx++] = x;
    int cnt = 0;
    for(int i = 0; i < idx; i++)
        while(a[i]) b[cnt++] = i, a[i]--;
    sort(b,b+cnt);
    if(!b[0])
    {
    
    
        for(int i = 1; i < cnt; ++i)
            if(b[i]) swap(b[0],b[i]), i = cnt;
    }
    for(int i = 0; i < cnt; i++) cout<<b[i];
    cout<<'\n';
    return 0;
}

1024 科学计数法

在这里插入图片描述

#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    
    
    string s,x = "", y = "";
    cin>>s;
    int len = s.size(), num = 0, ok1 = 0, ok2 = 0;
    for(int i = 0; i < len; i++)
    {
    
    
        if(s[i] == '-') ok1 = 1;i++;
        while(s[i] != '.') x += s[i],i++;i++;
        while(s[i] != 'E') y += s[i],i++;i++;
        if(s[i] == '-') ok2 = 1; i++;
        while(i < len) num = num*10+s[i]-'0', i++;
    }
    //cout<<x<<" "<<y<<" "<<num<<'\n';
    if(ok2)
    {
    
    
        string t = "";
        if(x.size() <= num) 
        {
    
    
            for(int i = 0; i < num-x.size();i++) t+= "0";
            t += x;
            x.clear();
        }
        else if(x.size() > num)
        {
    
    
            int cnt = 0;
            for(int i = x.size()-1; cnt < num; --i) t += x[i],cnt++;
            string temp = "";
            for(int i = 0; i < x.size() - num; i++) temp += x[i];
            x.clear(); x = temp;
        }
        if(ok1) cout<<"-";
        if(x.size() == 0) 
        {
    
    
            cout<<"0.";
            cout<<t<<y<<'\n';
        }
        else cout<<x<<"."<<t<<y<<'\n';
    }
    if(!ok2)
    {
    
    
        string  t = "";
        if(y.size() <= num)
        {
    
    
            t = y;
            for(int i = 0; i < num-y.size(); i++) t += "0";
            y.clear();
        }
        else if(y.size() > num)
        {
    
    
            int i = 0;
            for( ; i < num; i++) x += y[i];
            for( ; i < y.size(); i++) t += y[i];
        }
        if(ok1) cout<<"-";
        if(y.size() == 0) cout<<x<<t<<'\n';
        else cout<<x<<"."<<t<<'\n';
    }
    return 0;
}

1025 反转链表

在这里插入图片描述
输入样例

00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

输出样例

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1e5 + 7;
struct node{
    
    
    int data, ne;
};
node a[maxn],b[maxn];
int main()
{
    
    
    int head, n, k;
    scanf("%d%d%d",&head,&n,&k);
    for(int i = 0; i < n; ++i) 
    {
    
    
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        a[x].data = y;
        a[x].ne = z;
    }

    int cnt = 0;
    for(int i = head; i != -1; i = a[i].ne) 
        b[cnt].data = a[i].data, b[cnt++].ne = i;
    
    int x = 0,y = 0;
    for(int i = 0; i < cnt/k; ++i)
        for(int j = 0; j < k/2; ++j)
        {
    
    
            node t;
            x = k*i+j;
            y = k*(i+1) - j - 1;
            t = b[x];
            b[x] = b[y];
            b[y] = t;
        }
    for(int i = 0; i < cnt; i++)
        if(i < cnt-1) printf("%05d %d %05d\n", b[i].ne, b[i].data, b[i + 1].ne);
        else printf("%05d %d -1\n", b[cnt - 1].ne, b[cnt - 1].data);
    return 0;
}

1026 程序运行时间

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
    
    
    int x,y;
    cin>>x>>y;
    int t = y - x;
    int h = t/360000,f = (t - h*360000)/6000, m = (t - h*360000 - f*6000);
    int yu = m%100;
    if(yu >= 50) m = m/100+1;
    else m /= 100;
    if(h < 10) cout<<0<<h<<":";
    else cout<<h<<":";
    if(f < 10) cout<<0<<f<<":";
    else cout<<f<<":";
    if(m < 10) cout<<0<<m;
    else cout<<m;
    cout<<'\n';
    return 0;
}

1027 打印沙漏

在这里插入图片描述

#include<cstdio>
using namespace std;
int main()
{
    
    
    int n, i = 0; char a;                         
    scanf("%d %c", &n, &a);
    for ( i= 0; i < n;i++)
        if(2*i*i-1>n)
        {
    
    
            i = i - 1; 
            break;
        }
    n = n - 2*i * i + 1;  
    
    for (int j = i; j > 0; j--)
    {
    
    
        for (int k = 0; k < i - j; k++) putchar(' ');
        for (int k = 1; k < 2 * j; k++) printf("%c", a);
        printf("\n");
    }                                   
    
    for (int j = 2; j <= i; j++)
    {
    
    
        for (int k = 0; k < i - j; k++) putchar(' ');
        for (int k = 1; k < 2 * j; k++) printf("%c", a);
        printf("\n");
    }                                 
    printf("%d", n);                  
    return 0; 
}

1028 人口普查

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
struct node{
    
    
    string name;
    int age;
    bool operator < (const node &t)const{
    
    
        return age < t.age;
    }
};
node a[100007];
int main()
{
    
    
    int n;
    cin>>n;
    int cnt = 0;
    for(int i = 0; i < n; ++i)
    {
    
    
        string s, t;
        cin>>s>>t;
        int num = 0;
        for(int i = 0; i < t.size(); ++i)
            if(t[i] != '/')
                num = num*10 + t[i] - '0';
        if(num >20140906 || num < 18140906) continue;
        a[cnt].name = s; a[cnt].age = num; cnt++;
    }
    sort(a,a+cnt);
    if(cnt) cout<<cnt<<" "<<a[0].name<<" "<<a[cnt-1].name<<'\n';
    else cout<<0<<'\n';
    return 0;
}

1029 旧键盘

在这里插入图片描述

#include <iostream>
#include <string>
#include <set>
using namespace std;
set<char>st;
int main()
{
    
    
    string s,t;
    cin>>s>>t;
    for(int i = 0; i < s.size(); i++)
    {
    
    
        int ok = 0;
        for(int j = 0; j < t.size(); j++)
            if(s[i] == t[j]) ok = 1;
        
        if(s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 32;
        if(!ok && st.find(s[i]) == st.end())
        {
    
    
            cout<<s[i];
            st.insert(s[i]);
        }
    }
    cout<<endl;
    return 0;
}

1030 完美数列

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
ll a[maxn];
int main()
{
    
    
    ll n,p;
    scanf("%lld%lld",&n,&p);
    for(int i = 0; i < n; ++i) scanf("%lld",&a[i]);
    sort(a,a+n);
    int j = 0,cnt = 0;
    for(int i = 0; i < n; i++)
    {
    
    
        for(j; j < n; j++)
        {
    
    
            if(a[j] > a[i]*p) break;
            cnt = max(cnt,j-i+1);
        }
    }
    printf("%d\n",cnt);
    return 0;
}

1031 查验身份证

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
string s,ans[107];
int a[18] = {
    
    7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char b[11] = {
    
    '1','0','X','9','8','7','6','5','4','3','2'};
int main()
{
    
    
    int n,cnt = 0;
    cin>>n;
    for(int i = 0; i < n; ++i)
    {
    
    
        cin>>s;
        ll sum = 0; int ok = 0;
        for(int j = 0; j < s.size() - 1; ++j)
        {
    
    
            if(s[j] < '0' || s[j] > '9') ok = 1, j = 18;
            sum += (int)(s[j] - '0')*a[j];
        }
        if(ok || s[17] != b[sum%11]) ans[cnt++] = s;
    }
    if(!cnt) cout<<"All passed"<<'\n';
    else for(int i = 0; i < cnt; ++i) cout<<ans[i]<<'\n';
    return 0;
}

1032 挖掘机技术哪家强

在这里插入图片描述

#include <cstdio>
using namespace std;
int a[100007];
int main()
{
    
    
    int n;
    scanf("%d",&n);
    for(int i = 0; i < n; ++i)
    {
    
    
        int x, y;
        scanf("%d%d",&x,&y);
        a[x] += y;
    }
    int ans = 0, cnt = 0,id = 0;
    for(int i = 0; i < 100007; ++i)
    {
    
    
        if(a[i])
        {
    
    
            if(a[i] > ans) ans = a[i], id = i;
            cnt++;
        }
        if(cnt == n) i = 100007;
    }
    printf("%d %d\n",id,ans);
    return 0;
}

1033 旧键盘打字

在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
set<char> st;
int main()
{
    
    
    string s,t;
    getline(cin,s);
    getline(cin,t);
    int ok = 0;
    for(int i = 0; i < s.size(); i++)
    {
    
    
        if(s[i]=='+') ok = 1;
        if(s[i] >= 'A' && s[i] <= 'Z') 
        {
    
    
            st.insert(s[i]);
            s[i] += 32;
        }
        if(s[i] >= 'a' && s[i] <= 'z')
        {
    
    
            st.insert(s[i]);
            s[i] -= 32;
        }
        st.insert(s[i]);
    }
    
    for(int i = 0; i < t.size(); i++)
    {
    
    
        if(st.find(t[i]) == st.end())
        {
    
    
            if(!ok) cout<<t[i];
            else if(ok)
            {
    
    
                if(t[i] >= 'A' && t[i] <= 'Z') continue;
                else cout<<t[i];
            }
        }
    }
    cout<<'\n';
    return 0;
}

1034 有理数四则运算

在这里插入图片描述

#include <iostream>
#include <cmath>
using namespace std;
long long a, b, c, d;
long long gcd(long long t1, long long t2) {
    
    
    return t2 == 0 ? t1 : gcd(t2, t1 % t2);
}
void func(long long m, long long n) {
    
    
    if (m * n == 0) {
    
    
        printf("%s", n == 0 ? "Inf" : "0");
        return ;
    }
    bool flag = ((m < 0 && n > 0) || (m > 0 && n < 0));
    m = abs(m); n = abs(n);
    long long x = m / n;
    printf("%s", flag ? "(-" : "");
    if (x != 0) printf("%lld", x);
    if (m % n == 0) {
    
    
        if(flag) printf(")");
        return ;
    }
    if (x != 0) printf(" ");
    m = m - x * n;
    long long t = gcd(m, n);
    m = m / t; n = n / t;
    printf("%lld/%lld%s", m, n, flag ? ")" : "");
}
int main() {
    
    
    scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
    func(a, b); printf(" + "); func(c, d); printf(" = "); func(a * d + b * c, b * d); printf("\n");
    func(a, b); printf(" - "); func(c, d); printf(" = "); func(a * d - b * c, b * d); printf("\n");
    func(a, b); printf(" * "); func(c, d); printf(" = "); func(a * c, b * d); printf("\n");
    func(a, b); printf(" / "); func(c, d); printf(" = "); func(a * d, b * c);
    return 0;
}

1035 插入与归并

在这里插入图片描述
参考博文

#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
int a[maxn],b[maxn],c[maxn];
void Insert_Sort(int x[], int y[], int p)
{
    
    
    int ok = 1;
    for(int i = 2; i <= p; i++)
    {
    
    
        sort(x,x+i);
        ok = 1;
        for(int j = 0; j < p; j++)
            if(x[j] != y[j]) ok = 0;

        if(ok)
        {
    
    
            puts("Insertion Sort");
            i++;
            sort(x,x+i);
            for(int j = 0; j < p; j++)
                if(!j) cout<<x[j];
                else cout<<" "<<x[j];
            return ;
        }
    }
}
void Merge_Sort(int x[],int y[],int p)
{
    
    
    int ok = 1;
    for(int i = 2; i <= p; i *= 2)
    {
    
    
        for(int j = 0; j < p; j += i)
            sort(x + j, x + (j+i < p ? j+i : p));

        ok = 1;
        for(int j = 0; j < p; j++)
            if(x[j] != y[j]) ok = 0;

        if(ok)
        {
    
    
            puts("Merge Sort");
            i *= 2;
            for(int j = 0; j < p; j += i)
                sort(x + j, x + (j+i < p ? j+i : p));

            for(int j = 0; j < p; j++)
                if(!j) cout<<x[j];
                else cout<<" "<<x[j];
            return ;
        }
    }
}
int main()
{
    
    
    int n;
    cin>>n;
    for(int i = 0; i < n; i++) cin>>a[i], b[i] = a[i];
    for(int i = 0; i < n; i++) cin>>c[i];
    Merge_Sort(a,c,n);
    Insert_Sort(b,c,n);
    return 0;
}

1036 跟奥巴马一起编程

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
    
    
    int n;
    char ch;
    cin>>n>>ch;
    int len = (n+1)>>1;
    for(int i = 1; i <= len; i++)
    {
    
    
        for(int j = 1; j <= n; j++)
        {
    
    
            if(i == 1 || i == len) cout<<ch;
            else if(j== 1 || j == n) cout<<ch;
            else cout<<" ";
        }
        cout<<'\n';
    }
    return 0;
}

1037 在霍格沃茨找零钱

在这里插入图片描述

#include <iostream>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;

vector<ll> Change(string s)
{
    
    
    vector<ll> C;
    for(int i = 0; i < s.size(); i++)
    {
    
    
        ll p = 0;
        while(s[i] != '.' && i < s.size())
        {
    
    
            p = p * 10 + (ll)(s[i] - '0');
            i++;
        }
        C.push_back(p);
    }
    return  C;
}
int main()
{
    
    
    string a,b;
    cin>>a>>b;
    vector<ll>x,y;
    x = Change(a);
    y = Change(b);
    int ok = 0;
    for(int i = 0; i < x.size(); i++)
        if(x[i] == y[i]) i++;
        else if(x[i] > y[i]) ok = 1, i = 4;
        else ok = 0, i = 4;
    ll ans[4] = {
    
    0};
    if(ok)
    {
    
    
        for(int i = 2; ~i; --i)
        {
    
    
            if(x[i] >= y[i] && i == 2) ans[i] = x[i] - y[i];
            else if(i == 2 && x[i] < y[i])
            {
    
    
                x[i-1]--;
                x[i] += 29;
                ans[i] = x[i] - y[i];
            }
            if(i == 1 && x[i] >= y[i]) ans[i] = x[i] - y[i];
            else if(i == 1 && x[i] < y[i])
            {
    
    
                x[i-1]--;
                x[i] += 17;
                ans[i] = x[i] - y[i];
            }
            if(i == 0) ans[i] = x[i] - y[i];
        }
        cout<<"-";
    }
    else
    {
    
    
        for(int i = 2; ~i; --i)
        {
    
    
            if(y[i] >= x[i] && i == 2) ans[i] = y[i] - x[i];
            else if(i == 2 && y[i] < x[i])
            {
    
    
                y[i-1]--;
                y[i] += 29;
                ans[i] = y[i] - x[i];
            }
            if(i == 1 && y[i] >= x[i]) ans[i] = y[i] - x[i];
            else if(i == 1 && y[i] < x[i])
            {
    
    
                y[i-1]--;
                y[i] += 17;
                ans[i] = y[i] - x[i];
            }
            if(i == 0) ans[i] = y[i] - x[i];
        }
    }
    for(int i = 0; i < 3; i++)
        if(!i) cout<<ans[i];
        else cout<<"."<<ans[i];
    cout<<'\n';
    return 0;
}

1038 统计同成绩学生

在这里插入图片描述

#include <iostream>
using namespace std;
const int maxn = 110;
int main()
{
    
    
    int n, a[maxn] = {
    
    0};
    cin>>n;
    while(n--)
    {
    
    
        int x;
        cin>>x;
        a[x]++;
    }
    int k;
    cin>>k;
    while(k--)
    {
    
    
        int y;
        cin>>y;
        if(k == 0) cout<<a[y]<<endl;
        else cout<<a[y]<<" ";
    }
    return 0;
}

1039 到底买不买

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
int main()
{
    
    
    string x,y;
    cin>>x>>y;
    int cnt1 = x.size(), cnt2 = y.size();
    int ok = 0, lose = 0;
    for(int i = 0; i < cnt2; i++)
    {
    
    
        for(int j = 0; j < cnt1; j++)
            if(y[i] == x[j]) 
            {
    
    
                x[j] = '#';
                break;
            }
            else if(j == cnt1-1 && x[j] != y[i]) ok = 1, lose++;
    }
    
    if(ok) cout<<"No "<<lose<<'\n';
    else cout<<"Yes "<<cnt1-cnt2<<'\n';
    return 0;
}

1040 有几个PAT

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
const int mod = 1000000007;
int main()
{
    
    
    string s;
    cin>>s;
    int len = s.size();
    int a[100007] = {
    
    0};
    int p = 0, t = 0;
    for(int i = 0; i < len; i++)
    {
    
    
        if(s[i] == 'P') ++p;
        if(s[i] == 'A') a[i] = p;
    }
    int ans = 0;
    for(int i = len-1; ~i; i--)
    {
    
    
        if(s[i] == 'T') t++;
        if(s[i] == 'A') ans = (ans + t*a[i]%mod)%mod;
    }
    cout<<ans<<'\n';
    return 0;
}

1041 考试座位号

在这里插入图片描述

#include <iostream>
#include <map>
using namespace std;
struct node{
    
    
    string no;
    int n;
};
map<int,node>mp;
int main()
{
    
    
    int n;
    cin>>n;
    while(n--)
    {
    
    
        string s;
        int x,y;
        cin>>s>>x>>y;
        mp[x] = {
    
    s,y};
    }
    int m;
    cin>>m;
    while(m--)
    {
    
    
        int x;
        cin>>x;
        cout<<mp[x].no<<" "<<mp[x].n<<'\n';
    }
    return 0;
}

1042 字符统计

在这里插入图片描述

#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
map<char,int>mp;
set<char>st;
int main()
{
    
    
    string s;
    getline(cin,s);
    int len = s.size();
    for(int i = 0; i < len; i++)
    {
    
    
        if(s[i] >= 'A' && s[i] <= 'Z') s[i] += 32;
        if(s[i] >= 'a' && s[i] <= 'z')
        {
    
    
            st.insert(s[i]);
            mp[s[i]]++;
        } 
    }
    int cnt = st.size();
    int maxx = 0;
    char ch;
    for(set<char>::iterator it = st.begin(); it != st.end(); ++it)
        if(mp[*it] > maxx && *it != ' ') maxx = mp[*it], ch = *it;
   cout<<ch<<" "<<maxx<<'\n';
    return 0;
}

1043 输出PATest

在这里插入图片描述

#include <iostream>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
map<char,int> mp;
int main()
{
    
    
    string x;
    cin>>x;
    int len = x.size();
    for(int i = 0; i < len; i++)
    {
    
    
        if(x[i] == 'P' || x[i] == 'A' || x[i] == 'T' || x[i] == 'e' || x[i] == 's' || x[i] == 't')
            ++mp[x[i]];
    }
    int P = mp['P'], A = mp['A'], T = mp['T'], e = mp['e'], s = mp['s'], t = mp['t'];
    while(P > 0 || A > 0 || T > 0 || e > 0 || s > 0 || t > 0)
    {
    
    
        if(P) 
        {
    
    
            cout<<'P';
            P--;
        }
        if(A)
        {
    
    
            cout<<'A';
            A--;
        }
        if(T)
        {
    
    
            cout<<'T';
            T--;
        }
        if(e)
        {
    
    
            cout<<'e';
            e--;
        }
        if(s)
        {
    
    
            cout<<'s';
            s--;
        }
        if(t)
        {
    
    
            cout<<'t';
            t--;
        }
    }
    cout<<'\n';
    return 0;
}

1044 火星数字

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
string low[13] = {
    
    "tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};
string h[13] = {
    
    "", "tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"};

int len;
void To_string(int t) 
{
    
    
    if (t / 13) cout << h[t / 13];
    if (t/13 && t%13) cout << " ";
    if (t % 13 || t == 0) cout << low[t % 13];
}
void To_num(string s,int len) 
{
    
    
    int t1 = 0, t2 = 0;  //t1高位 t2:低位
    string s1 = s.substr(0, 3), s2;  //s1高位 s2:低位
    if (len > 4) s2 = s.substr(4, 3);  
    for (int j = 1; j <= 12; j++) 
    {
    
    
        if (s1 == low[j] || s2 == low[j]) t2 = j;
        if (s1 == h[j]) t1 = j;
    }
    cout << t1 * 13 + t2;
}
int main() 
{
    
    
    int n;
    cin >> n;
    getchar();
    while(n--)
    {
    
    
        string s;
        getline(cin, s);
        len = s.size();
        if (s[0] >= '0' && s[0] <= '9')
            To_string(stoi(s));  //stois: 将字符串转化成 数字
        else To_num(s,len);
        cout<<'\n';
    }
    return 0;
}

1045 快速排序

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 7;
int main()
{
    
    
    int a[maxn] = {
    
    0}, b[maxn] = {
    
    0}, c[maxn] = {
    
    0};
    int n;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
    
    
        cin>>a[i];
        b[i] = a[i];
    }
    int cnt = 0, maxx = 0;
    sort(a,a+n);
    for(int i = 0; i < n; i++)
    {
    
    
        if(b[i] > maxx) maxx = b[i];
        if(a[i] == b[i] && b[i] == maxx) c[cnt++] = b[i];
    }
    cout<<cnt<<'\n';
    if(!cnt) cout<<'\n';
    else
    {
    
    
        for(int i = 0; i < cnt; i++)
            if(!i) cout<<c[i];
            else cout<<" "<<c[i];
        cout<<'\n';
    }
    return 0;
}

1046 划拳

在这里插入图片描述

#include <iostream>
using namespace std;
int a[110], b[110], c[110];
int main()
{
    
    
    int n;
    cin>>n;
    int idx = 0;
    while(n--)
    {
    
    
        int x,y,z,k;
        cin>>x>>y>>z>>k;
        a[idx] = x + z;
        b[idx] = y;
        c[idx++] = k;
    }
    int cntb = 0, cntc = 0;
    for(int i = 0; i < idx; i++)
    {
    
    
        if(a[i] == b[i] && a[i] == c[i]) continue;
        if(a[i] == b[i]) cntb++;
        if(a[i] == c[i]) cntc++;
    }
    cout<<cntc<<" "<<cntb<<'\n';
    return 0;
}

1047 编程团体赛

在这里插入图片描述

#include <cstdio>
#include <vector>
#include <algorithm>
#define PII pair
using namespace std;
PII<int,int> p[10007];
int main()
{
    
    
    int n;
    scanf("%d",&n);
    while(n--)
    {
    
    
        int x,y,z;
        scanf("%d-%d %d",&x,&y,&z);
        p[x].first = x;
        p[x].second += z;
    }
    int no,rate = 0;
    for(int i = 1; i <= 1000; i++)
        if(p[i].second > rate) rate = p[i].second, no = i;
    printf("%d %d\n",no,rate);
    return 0;
}

1048 数字加密

在这里插入图片描述

#include<iostream>
using namespace std;
char list[13] = {
    
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K'};
int main()
{
    
    
	string a, b;
	int temp;
	cin >> a >> b;
	if(b.length() < a.length()) b.insert(0, a.length() - b.length(), '0');  // 在b字符串第初始位置插入 n 个字符 '0'
	for(int i = b.length() - 1, j = a.length() - 1, pos = 0; j >= 0; i--, j--, pos++)
    {
    
    
		if(pos % 2 == 0) //处于第奇数个位置的字符串
        {
    
    
			temp = ((a[j] - '0') + (b[i] - '0')) % 13;
			b[i] = list[temp];
		}
        else //处于偶数个位置的字符串
        {
    
    
			if(b[i] - a[j] < 0) b[i] = b[i] - a[j] + '0' + 10;
			else b[i] = b[i] - a[j] + '0';
		}
	}
	cout << b;
}

1049 数列的片段和

在这里插入图片描述
参考题解
规律题:(0.1 0.2 0.3 0.4)的排列有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4),仔细观察你会发现每个数出现的次数就是 (i+1)(n-i),但是提交第三个测试点没有通过,上篇给的参考博客写了一个原因,有兴趣的前去参观。

#include <iostream>
#include <iomanip>
using namespace std;
typedef long long ll;
int main()
{
    
    
    int n;
    ll ans = 0.0;
    cin>>n;
    for(int i = 0; i < n; ++i)
    {
    
    
        double t;
        cin>>t;
        ll temp = t*1000;
        ans += temp*(i+1)*(n-i);
    }
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<(ans/1000.0)<<'\n';
    return 0;
}

1050 螺旋矩阵

在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<vector> 
#include<cmath>
using namespace std;  
vector<int>V;
bool cmp(int a, int b) {
    
    return a > b;}
int main() 
{
    
    
    int N, m, n;
    scanf("%d", &N);
    V.resize(N);
    for (int i = 0; i < N; i++)
        scanf("%d", &V[i]);
    sort(V.begin(), V.end(), cmp);
    for (int i = sqrt(N); i >= 1; i--) 
    {
    
    
        if (N%i == 0)
        {
    
    
            m = N / i;
            n = i;
            break;
        }
    }
    vector<vector<int>>Vp(m, vector<int>(n));
    int level = (n+1)/2;
    int i = 0;
    for (int L = 0; L < level; L++) 
    {
    
    
        for (int j = L; j <= n - 1 - L && i < N; j++)
            Vp[L][j] = V[i++];
        for (int j = L + 1; j <= m - 1 - L && i < N; j++)
            Vp[j][n - 1 - L] = V[i++];
        for (int j = n - 1 - L - 1; j >= L && i < N; j--)
            Vp[m - 1 - L][j] = V[i++];
        for (int j = m - 1 - L - 1; j >= L + 1 && i < N; j--)
            Vp[j][L] = V[i++];
    }
    for (int i = 0; i < m; i++)
    {
    
    
        for (int j = 0; j < n; j++) 
        {
    
    
            if (j != 0)
                printf(" ");
            printf("%d", Vp[i][j]);
        }
        printf("\n");
    }
    return 0;
}

1051 复数乘法

在这里插入图片描述

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
    
    
    double r1,r2,p1,p2;
    cin >> r1 >> p1 >> r2 >>p2;
    double a1 = r1*cos(p1);
    double b1 = r1*sin(p1);
    double a2 = r2*cos(p2);
    double b2 = r2*sin(p2);
    double x = a1*a2 - b1*b2;
    double y = a1*b2 + b1*a2;
    if(fabs(x) < 0.01) x = 0.00;
    if(fabs(y) < 0.01) y = 0.00;
    
    printf("%.2f",x);
    if(y>=0) printf("+");
    printf("%.2fi\n",y);
    return 0;
}

1052 卖个萌

在这里插入图片描述

#include <iostream>
#include <vector>
#include <cstdio>
#include <string>
using namespace std;
vector<string> v[5];
void init()
{
    
    
    for(int i = 0; i < 3; i++)
    {
    
    
        string s,t;
        getline(cin,s);
        for(int j = 0; j < s.size(); j++)
        {
    
    
            if(s[j] == '[')
            {
    
    
                t = "";
                j++;
                while(s[j] != ']')
                {
    
    
                    t += s[j];
                    j++;
                }
                v[i].push_back(t);
            }
        }
    }
}
int main()
{
    
    
    init();
    int k;
    cin>>k;
    while(k--)
    {
    
    
        int x1,y1,z,y2,x2;
        cin>>x1>>y1>>z>>y2>>x2;
        if(x1 < 1 || y1 < 1 || z < 1 || y2 < 1 || x1 < 1 || x1 > v[0].size() || y1 > v[1].size() || z > v[2].size() || y2 > v[1].size() || x2 > v[0].size())
            puts("Are you kidding me? @\\/@");
        else cout<<v[0][x1-1]<<"("<<v[1][y1-1]<<v[2][z-1]<<v[1][y2-1]<<")"<<v[0][x2-1]<<'\n';
    }
    return 0;
}

1053 住房空置率

在这里插入图片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    
    
    int n,d;
    double e;
    cin>>n>>e>>d;
    int kong = 0, wu = 0;
    for(int i = 0; i < n; i++)
    {
    
    
        int k,cnt = 0;
        cin>>k;
        for(int j = 0; j < k; j++)
        {
    
    
            double t;
            cin>>t;
            if(t < e) cnt++;
        }
        if(cnt > (k/2))
        {
    
    
            if(k > d) wu++;
            else kong++;
        }
    }
    double x = (double) kong/n*100;
    double y = (double) wu/n*100;
    printf("%.1f%% %.1f%%\n",x,y);
    return 0;
}

1054 求平均值

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
 char a[50], b[50];
int main() 
{
    
    
    int n, cnt = 0;
    double temp = 0.0, sum = 0.0;
    cin >> n;
    for(int i = 0; i < n; i++) 
    {
    
    
        scanf("%s", a);
        sscanf(a, "%lf", &temp);    //从 a(字符串)中读进与指定格式相符的数据输入到 temp 中
        sprintf(b, "%.2f",temp);  //将 temp 格式化输入到 b(字符串)中 (注意没有&号)
        int flag = 0;
        for(int j = 0; j < strlen(a); j++)
            if(a[j] != b[j]) flag = 1;
        if(flag || temp < -1000 || temp > 1000) 
        {
    
    
            printf("ERROR: %s is not a legal number\n", a);
            continue;
        } 
        else 
        {
    
    
            sum += temp;
            cnt++;
        }
    }
    if(cnt == 1)
        printf("The average of 1 number is %.2f", sum);
    else if(cnt > 1)
        printf("The average of %d numbers is %.2f", cnt, sum / cnt);
    else
        printf("The average of 0 numbers is Undefined");
    return 0;
}

1055 集体照

在这里插入图片描述

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 1e4 + 7;
struct node{
    
    
    int h;
    string name;
    bool operator < (const node &t)const
    {
    
    
        if(h != t.h) return h > t.h;
        return name < t.name;
    }
}p[maxn];
string line[maxn];
int main()
{
    
    
    int n,k;
    cin>>n>>k;
    for(int i = 0; i < n; i++) cin>>p[i].name>>p[i].h;
    sort(p,p+n);
    for(int j = 0, i = 0; i < k; i++)
    {
    
    
        int len = n/k;
        if(i == 0) len += n%k;
        for(int r = len/2 + 1, l = r - 1; r <= len || l > 0; r++, l--)
        {
    
    
            if(r <= len) line[r] = p[j++].name;
            if(l > 0) line[l] = p[j++].name;
        }
        for(int l = 1; l <= len; l++)
            if(l == 1) cout<<line[l];
            else cout<<' '<<line[l];
        cout<<'\n';
    }
    return 0;
}

1056 组合数的和

在这里插入图片描述

#include <iostream>
using namespace std;
int a[15];
int main()
{
    
    
    int n;
    cin>>n;
    for(int i = 0; i < n; i ++) cin>>a[i];
    int ans = 0;
    for(int i = 0; i < n; i++)
    {
    
    
        int t = a[i]*10;
        if(!t) continue;
        for(int j = 0; j < n; j++)
            if(i != j) ans += t + a[j];
    }
    cout<<ans<<'\n';
    return 0;
}

1057 数零壹

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
int main()
{
    
    
    string x,y="";
    getline(cin,x);
    for(int i = 0; i < x.size(); i++)
    {
    
    
        if(x[i] >= 'A' && x[i] <= 'Z') x[i] += 32;
        if(x[i] >= 'a' && x[i] <= 'z') y += x[i];
    }
    if(!y.size()) 
    {
    
    
        cout<<0<<" "<<0<<'\n';
        return 0;
    }
    ll sum = 0;
    for(int i = 0; i < y.size(); i++)
        sum += (ll)(y[i]-'a' + 1);
    string cnt = "";
    while(sum > 0)
    {
    
    
        ll yu = sum%2;
        cnt += (char)(yu+'0');
        sum /= 2;
    }
    int zero = 0, one = 0;
    for(int i = 0; i < cnt.size(); i++)
    {
    
    
        if(cnt[i] == '0') zero++;
        if(cnt[i] == '1') one++;
    }
    cout<<zero<<" "<<one<<'\n';
    return 0;
}

1058 选择题

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;
const int maxn = 1e3 + 7, maxm = 1e2 + 7;
struct node{
    
    
    int grade;
    string answer;
};
node cho[maxm];
int ans[maxn];
int main()
{
    
    
    int n,m;
    cin>>n>>m;
    for(int i = 1; i <= m; i++)
    {
    
    
        int a,b,c;
        char x;
        cin>>a>>b>>c;
        string temp = "";
        for(int i = 0; i < c; i++)
        {
    
    
            cin>>x;
            temp += x;
        }
        cho[i] = {
    
    a,temp};
    }
  
    int ok[maxn] = {
    
    0};
    getchar();
    for(int i = 1; i <= n; i++)
    {
    
    
        string s;
        getline(cin,s);
        int cnt = 1;
        for(int j = 0; j < s.size(); j++)
        {
    
    
            string t = "";
            if(s[j] == '(')
            {
    
    
                while(s[j+1] != ')')
                {
    
    
                    if(s[j+1] >= 'a' && s[j+1] <= 'z') t += s[j+1];
                    j++;
                }
                if(t == cho[cnt].answer) ans[i] += cho[cnt].grade;
                else ok[cnt]++;
                cnt++;
            }
        }
    }
    
    for(int i = 1; i <= n; i++) cout<<ans[i]<<'\n';
    bool flag = false;
    int maxx = 0;
    for(int i = 1; i <= m; i++)
    {
    
    
        if(ok[i] > maxx) maxx = ok[i];
        if(ok[i]) flag = 1;
    }
    if(!flag) cout<<"Too simple"<<'\n';
    else
    {
    
    
        cout<<maxx;
        for(int i = 1; i <= m; i++)
            if(ok[i] == maxx) cout<<" "<<i;
        cout<<'\n';
    }
    return 0;
}

1059 C语言竞赛

在这里插入图片描述

#include <iostream>
#include <string>
#include <map>
#include <set>
using namespace std;
int p[10007],cnt;
bool st[10007];
map<string,int> mp;
set<int>num;
set<string> ch;
void init()
{
    
    
    for(int i = 2; i < 10007; i++)
    {
    
    
        if(!st[i]) num.insert(i),p[cnt++] = i;
        for(int j = 0; p[j] <= 10007/i; j++)
        {
    
    
            st[i*p[j]] = true;
            if(i%p[j] == 0) break;
        }
    }
}
int main()
{
    
    
    init();
    int n;
    cin>>n;
    for(int i = 1; i <= n; i++)
    {
    
    
        string x;
        cin>>x;
        ch.insert(x);
        mp[x] = i;
    }
    int k;
    cin>>k;
    int vis[10007] = {
    
    0};
    while(k--)
    {
    
    
        string y;
        cin>>y;
        if(ch.find(y) == ch.end()) cout<<y<<": Are you kidding?"<<'\n';
        else
        {
    
    
            int cnt = mp[y];
            if(vis[cnt]) cout<<y<<": Checked"<<'\n';
            else
            {
    
    
                if(cnt == 1) cout<<y<<": Mystery Award"<<'\n';
                else if(num.find(cnt) == num.end()) cout<<y<<": Chocolate"<<'\n';
                else cout<<y<<": Minion"<<'\n';
            }
            vis[cnt] = 1;
        }
    }
    return 0;
}

1060 爱丁顿数

在这里插入图片描述

#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn = 100010;
int n;
int a[maxn];

int main()
{
    
    
    scanf("%d", &n);
    for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
    sort(a, a + n);

    for (int i = n; i; i -- )
        if (a[n - i] > i)
        {
    
    
            printf("%d\n", i);
            return 0;
        }

    puts("0");
    return 0;
}

1061 判断题

在这里插入图片描述

#include <iostream>
using namespace std;
int g[110],ok[110];
int main()
{
    
    
    int n,m,x;
    cin>>m>>n;
    for(int i = 0; i < n; i++) 
    {
    
    
        cin>>x;
        g[i] = x;
    }
    for(int i = 0; i < n; i++)
    {
    
    
        cin>>x;
        ok[i] = x;
    }
    while(m--)
    {
    
    
        int grade = 0;
        for(int i = 0; i < n; i++)
        {
    
    
            cin>>x;
            if(x == ok[i]) grade += g[i];
        }
        cout<<grade<<'\n';
    }
    return 0;
}

1062 最简分数

#include <cstdio>
#include <algorithm>
using namespace std;
int main() 
{
    
    
    int n1, m1, n2, m2, k;
    scanf("%d/%d %d/%d %d", &n1, &m1, &n2, &m2, &k);
    if(n1 * m2 > n2 * m1) {
    
    
        swap(n1, n2);
        swap(m1, m2);
    }
    int num = 1;
    bool flag = false;
    while(n1 * k >= m1 * num) num++;
    while(m2 * num < n2 * k) {
    
    
        if(__gcd(num, k) == 1) {
    
    
            if(!flag) printf("%d/%d",num,k);
            else printf(" %d/%d",num,k);
            flag = true;
        }
        num++;
    }
    return 0;
}

1063 计算谱半径

在这里插入图片描述

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
    
    
    int n;
    scanf("%d",&n);
    double ans = 0;
    for(int i = 0; i < n; i++)
    {
    
    
        double a,b;
        scanf("%lf %lf",&a,&b);
        ans = max(ans,sqrt(a*a+b*b));
    }
    printf("%.2f\n",ans);
    return 0;
}

1064 朋友数

在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int a[10004];
set<int>s;
int main()
{
    
    
    int n;
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
    
    
        int x;
        scanf("%d",&x);
        int temp = 0;
        while(x > 0)
        {
    
    
            temp += x%10;
            x /= 10;
        }
        s.insert(temp);
    }
    int cnt = 0;
    for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        a[cnt++] = *it;
    sort(a,a+cnt);
    printf("%d\n",cnt);
    for(int i = 0; i < cnt; i++)
        if(!i) printf("%d",a[i]);
        else printf(" %d",a[i]);
    return 0;
}

1065 单身狗

在这里插入图片描述

#include <iostream>
#include <set>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
map<string,string>mp;
set<string>s;
string b[10007];
int main()
{
    
    
    int n;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
    
    
        string x,y;
        cin>>x>>y;
        mp[x] = y;
        mp[y] = x;
    }
    int k;
    cin>>k;
    for(int i = 0; i < k; i++)
        cin>>b[i], s.insert(b[i]);
    
    for(int i = 0; i < k; i++)
    {
    
    
        string t = b[i];
        string x = mp[t];
        if(s.find(t) != s.end() && s.find(x) != s.end()) s.erase(t), s.erase(x);
    }
    cout<<s.size()<<'\n';
    int cnt = 0;
    for(set<string>::iterator it = s.begin(); it != s.end(); it++)
    {
    
    
       if(!cnt) cout<<*it;
        else cout<<" "<<*it;
        ++cnt;
    }
    return 0;
}

1066 图像过滤

在这里插入图片描述

#include <cstdio>
using namespace std;
int main()
{
    
    
    int n,m,a,b,k;
    scanf("%d%d%d%d%d",&n,&m,&a,&b,&k);
    for(int i = 0; i < n; i++)
    {
    
    
        for(int j = 0; j < m; j++)
        {
    
    
            int x;
            scanf("%d",&x);
            if(x < a || x > b)
            {
    
    
                if(j) printf(" ");
                if(x < 10) printf("00%d",x);
                else if(x < 100) printf("0%d",x);
                else printf("%d",x);
            }
            else
            {
    
    
                if(j) printf(" ");
                if(k < 10) printf("00%d",k);
                else if(k < 100) printf("0%d",k);
                else printf("%d",k);
            }
        }
        puts("");
    }
    return 0;
}

1067 试密码

在这里插入图片描述

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int main()
{
    
    
    int n;
    string ans,x;
    cin>>ans>>n;
    getchar();
    int cnt = 0;
    while(getline(cin,x))
    {
    
    
        if(x == "#") break;
        ++cnt;
        if(x == ans && cnt <= n)
        {
    
    
            puts("Welcome in");
            break;
        }
        else 
        {
    
    
            if(cnt <= n) cout<<"Wrong password: "<<x<<'\n';
            if(cnt == n) puts("Account locked");
        }
    }
    return 0;
}

1068 万绿丛中一点红

在这里插入图片描述

#include <cstdio>
#include <queue>
#include <map>
#include <cmath>
using namespace std;
const int maxn = 1e6 + 7, maxm = 1e3 + 7;
int dir[8][2] = {
    
    0,1,-1,1,-1,0,-1,-1,0,-1,1,-1,1,0,1,1};
struct node{
    
    
    int x,y,tem;
};
node now[maxn];
int a[maxm][maxm];
map<int,int>tot;
int main()
{
    
    
    int n,m,top;
    scanf("%d%d%d",&m,&n,&top);
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++) scanf("%d",&a[i][j]),tot[a[i][j]]++;
    
    int cnt = 0;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
    
    
            int ok = 0, t = a[i][j];
            if(tot[t] > 1) continue;
            for(int k = 0; k < 8; k++)
            {
    
    
                int tx = i + dir[k][0];
                int ty = j + dir[k][1];
                if(abs(t - a[tx][ty]) <= top) ok = 1;
            }
            if(!ok)
                now[cnt++] = {
    
    j,i,a[i][j]};
        }
    
    if(cnt == 1)
        printf("(%d, %d): %d\n",now[0].x,now[0].y,now[0].tem);
    else if(!cnt) puts("Not Exist");
    else puts("Not Unique");
    return 0;
}

1069 微博转发抽奖

在这里插入图片描述

#include <iostream>
#include <string>
#include <set>
using namespace std;
int main()
{
    
    
    int m,n,s;
    cin>>m>>n>>s;
    string ch[1007];
    set<string>st;
    for(int i = 1; i <= m; i++) cin>>ch[i];
    while(s <= m)
    {
    
    
        if(st.find(ch[s]) == st.end()) 
        {
    
    
            st.insert(ch[s]);
            cout<<ch[s]<<'\n';
        }
        else
        {
    
    
            while(st.find(ch[s]) != st.end() && s <= m)
                s++;
            if(s <= m)
            {
    
    
                st.insert(ch[s]);
                cout<<ch[s]<<'\n';
            }
        }
        s += n;
    }
    if(!st.size()) cout<<"Keep going...";
    return 0;
}

1070 结绳

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    
    
    int n,a[10007] = {
    
    0};
    cin>>n;
    for(int i = 0; i < n; i++) cin>>a[i];
    sort(a,a+n);
    int ans = a[0];
    for(int i = 1; i < n; i++) ans = (ans + a[i])/2;
    cout<<ans<<'\n';
    return 0;
}

1071 小赌怡情

在这里插入图片描述

#include <iostream>
using namespace std;
struct node{
    
    
    int n1,b,t,n2;
};
node a[107];
int main()
{
    
    
    int T,K;
    cin>>T>>K;
    for(int i = 0; i < K; i++)
    {
    
    
        int x,ok,num,y;
        cin>>x>>ok>>num>>y;
        a[i] = {
    
    x,ok,num,y};
    }
    
    for(int i = 0; i < K && T > 0; i++)
    {
    
    
        node now = a[i];
        if(T >= now.t)
        {
    
    
            if((now.b == 0 && now.n2 < now.n1) || (now.b && now.n2 > now.n1))
            {
    
    
                T += now.t;
                cout<<"Win "<<now.t<<"!  Total = "<<T<<"."<<'\n';
            }
            else 
            {
    
    
                T -= now.t;
                cout<<"Lose "<<now.t<<".  Total = "<<T<<"."<<'\n';
            }
        }
        else if(T < now.t) cout<<"Not enough tokens.  Total = "<<T<<"."<<'\n';
        if(T == 0) cout<<"Game Over."<<'\n';
    }
    return 0;
}

1072 开学寄语

在这里插入图片描述

#include <iostream>
#include <set>
#include <string>
#include <vector>
using namespace std;
int main()
{
    
    
    int n,m;
    cin>>n>>m;
    set<string> s;
    for(int i = 0; i < m; i++)
    {
    
    
        string x;
        cin>>x;
        s.insert(x);
    }
    int p = 0, cnt = 0;
    string ch[1007];
    vector<string>person;
    for(int i = 0; i < n; i++)
    {
    
    
        int k, ok = 0;
        cin>>ch[i]>>k;
        person.clear();
        for(int j = 0; j < k; j++)
        {
    
    
            string t;
            cin>>t;
            if(s.find(t) != s.end()) cnt++, ok = 1,person.push_back(t);
        }
        if(ok)
        {
    
    
            p++; 
            cout<<ch[i]<<":";
            for(auto &i : person) cout<<" "<<i;
            cout<<'\n';
        }
    }
    cout<<p<<" "<<cnt<<'\n';
    return 0;
}

1073 多选题常见计分法

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int Hash[7] = {
    
    1,2,4,8,16,32}; 
int ans[110];   //存储答案
int g[110];    //每个题的分数
int every[1007][107];   //每个人每个题的选择
int cnt[107][7];   //错误答案
int main()
{
    
    
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i = 0; i < m; i++)
    {
    
    
        int grade, tot, num;
        scanf(" %d %d %d",&grade,&tot,&num);
        g[i] = grade;
        for(int j = 0; j < num; j++)
        {
    
    
            char ch;
            scanf(" %c",&ch);
            ans[i]+= Hash[(int)(ch - 'a')];
        }
    }
    /***
    for(int i = 0; i < m; i++)
        cout<<g[i]<<"  "<<ans[i]<<'\n';
    ***/
    getchar();
    for(int i = 0; i < n; i++)
    {
    
    
        double sum = 0;
        string s;
        getline(cin,s);
        for(int j = 0, idx = 0; j < s.size(); j++)
        {
    
    
            if(s[j] == '(')
            {
    
    
                while(s[j+1] != ')')
                {
    
    
                    if(s[j+1] >= 'a' && s[j+1] <= 'e')
                        every[i][idx] += Hash[(int)(s[j+1] - 'a')];
                    j++;
                }
                if(s[j+1] == ')')
                {
    
    
                    int now = ans[idx] ^ every[i][idx];   //now == 0 表示全对
                    if(now)
                    {
    
    
                        if((ans[idx] | every[i][idx]) == ans[idx]) //漏选
                            sum += (double)(g[idx]*1.0/2);
                        for(int k = 0; k < 5; k++)
                            if(Hash[k] & now) cnt[idx][k]++;
                    }
                    else sum += (double)g[idx];
                //    cout<< i <<"    "<<every[i][idx]<<'\n';
                  //  cout<<i<<" 选择后的得分"<<sum<<'\n';
                    idx++;
                }
            }
        }
        printf("%.1f\n",sum);  //每个人的成绩
    }

    int maxn = 0;   //错误最多的次数
    for(int i = 0; i < m; i++)
        for(int j = 0; j < 5; j++)
            maxn = maxn > cnt[i][j] ? maxn : cnt[i][j];

    if(!maxn) puts("Too simple");  //全对
    else{
    
    
            for(int i = 0; i < m; i++)
                for(int j = 0; j < 5; j++)
                    if(maxn == cnt[i][j])
                        printf("%d %d-%c\n",maxn, i+1,'a'+ j);
    }
    return 0;
}

1074 宇宙无敌加法器

在这里插入图片描述

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    
    
    string s,a,b;
    cin>>s>>a>>b;
    if(a.size() < s.size()) a.insert(0,s.size()-a.size(),'0');
    if(b.size() < s.size()) b.insert(0,s.size()-b.size(),'0');

    int temp = 0;
    string ans = "";
    for(int i = a.size()-1; i >= 0; --i)
    {
    
    
        int mod = s[i] == '0' ? 10 : (s[i] - '0');
        ans += (a[i] - '0' + b[i] - '0' + temp)%mod + '0';
        temp = (a[i] - '0' + b[i] - '0' + temp)/mod;
    }
    bool flag = false;
    if(temp) ans += "1";

    for(int i = ans.size() - 1; i >= 0 ; i--)
        if(ans[i] != '0' || flag)
        {
    
    
            flag =true;
            cout<<ans[i];
        }
    if(!flag) cout<<0;
    return 0;
}

1075 链表元素分类

在这里插入图片描述

#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 1e5 + 7;
int val[maxn],later[maxn];
int main()
{
    
    
    int head, n, k;
    scanf("%d%d%d",&head,&n,&k);
    for(int i = 0; i < n; i++)
    {
    
    
        int add, data, Next;
        scanf("%d%d%d",&add,&data,&Next);
        val[add] = data; later[add] = Next; 
    }
    vector<int> a, b, c;
    for(int i = head; ~i; i = later[i])
        if(val[i] < 0) a.push_back(i);
        else if(val[i] <= k) b.push_back(i);
        else c.push_back(i);
    
    a.insert(a.end(),b.begin(),b.end());
    a.insert(a.end(),c.begin(),c.end());
    
    for(int i = 0; i < a.size(); i++)
    {
    
    
        printf("%05d %d ",a[i], val[a[i]]);
        if(i == a.size()-1) puts("-1");
        else printf("%05d\n",a[i+1]);
    }
    return 0  ;
}

1076 Wifi密码

在这里插入图片描述

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    
    
    int n;
    cin>>n;
    string ans = "";
    getchar();
    for(int i = 0; i < n; i++)
    {
    
    
        string s;
        getline(cin,s);
        int len = s.size();
        for(int i = 0; i < len; i++)
        {
    
    
            int ok = 0;
            if(s[i] == '-')
            {
    
    
                char ch = s[i-1];
                if(s[i+1] == 'T') 
                {
    
    
                    ok = 1;
                    ans += (ch - 'A' + 1 + '0');
                }
            }
            if(ok) break;
        }
    }
    cout<<ans<<'\n';
    return 0;
}

1077 互评成绩计算

在这里插入图片描述

#include <cstdio>
#include <algorithm>
using namespace std;
int a[107];
int main()
{
    
    
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++)
    {
    
    
        int idx = 0;
        int teach;
        scanf(" %d",&teach);
        for(int j = 0; j < n-1; j++)
        {
    
    
            int x;
            scanf("%d",&x);
            if(x <= m && x >= 0) a[idx++] = x;
        }
        sort(a,a+idx);
        int sum = 0;
        for(int j = 1; j < idx-1; j++) sum += a[j];
        double ave = sum*1.0/(idx-2);
        int ans = (ave + teach + 1)/2;
        printf("%d\n",ans);
    }
    return 0;
}

1078 字符串压缩与解压

在这里插入图片描述

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    
    
    char ch;
    cin>>ch;
    getchar();
    string ans = "";
    if(ch == 'C')
    {
    
    
        string s;
        getline(cin,s);

        for(int i = 0; i < s.size(); i++)
        {
    
    
            int cnt = 0, flag = i;
            char now = s[i];
            while(now == s[i] && i < s.size())
            {
    
    
                cnt++;
                i++;
            }
            string temp = "";
            if(cnt >= 1) i--;
            while( cnt >= 1 && flag != i)
            {
    
    
                temp += (char)(cnt%10 + '0');
                cnt /= 10;
            }
            
            for(int j = temp.size() - 1; j >= 0; j--) ans += temp[j];
            ans += now;
        }
    }
    
    if(ch == 'D')
    {
    
    
        string s;
        getline(cin,s);
        for(int i = 0; i < s.size(); i++)
        {
    
    
            int cnt = 0;
            while(s[i] >= '0' && s[i] <= '9' && i < s.size())
            {
    
    
                cnt = cnt*10 + (int)(s[i] - '0');
                i++;
            }
            if(cnt)
                for(int j = 0; j < cnt; j++) ans += s[i];
            else ans += s[i];
        }
    }
    cout<<ans<<'\n';
    return 0;
}

1079 延迟的回文数

在这里插入图片描述

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
bool check(vector<int> A)
{
    
    
    for(int i = 0, j = A.size()-1; i < j; i++, j--)
        if(A[i] != A[j]) return false;
    return true;
}

void Print(vector<int> A)
{
    
    
    for(int i = A.size() - 1; ~i; i--) cout<<A[i];
}

vector<int>add(vector<int> A, vector<int> B)
{
    
    
    vector<int> C;
    int t = 0;
    for(int i = 0; i < A.size() || i < B.size(); i++)
    {
    
    
        if(i < A.size()) t += A[i];
        if(i < B.size()) t += B[i];
        C.push_back(t%10);
        t /= 10;
    }
    if(t) C.push_back(1);
    return C;
}
int main()
{
    
    
    string a;
    cin>>a;
    vector<int> A;
    for(int i = a.size() - 1; ~i; i--) A.push_back(a[i] - '0');
    
    for(int i = 0; i < 10; i++)
    {
    
    
        if(check(A)) break;
        vector<int> B(A.rbegin(),A.rend());
        Print(A);cout<<" + ";Print(B);cout<<" = ";
        A = add(A,B);
        Print(A); cout<<'\n';
    }
    if(check(A)) Print(A),cout<<" is a palindromic number."<<'\n';
    else cout<<"Not found in 10 iterations.";
    return 0;
}

1080 MOOC期终成绩

在这里插入图片描述

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
using namespace std;
struct student{
    
    
    string name;
    int p, m, f, ave; //编程 期中 期末 平均
    student() : p(-1), m(-1), f(-1),ave(0) {
    
     }
    void cla()
    {
    
    
        if(f >= m) ave = f;  //期末 >= 期中
        else ave = round(m*0.4 + f*0.6);
    }
    bool operator < (const student &t)const
    {
    
    
        if(ave != t.ave) return ave > t.ave;  //按照成绩由高到低
        return name < t.name;  //按照名字从小到大
    }
};
int main()
{
    
    
    int p,m,n,g;
    string x;
    unordered_map<string,student> stu;
    cin>>p>>m>>n;
    for(int i = 0; i < p; i++)
    {
    
    
        cin>>x>>g;
        stu[x].name = x;
        stu[x].p = g;
    }
    for(int i = 0; i < m; i++)
    {
    
    
        cin>>x>>g;
        stu[x].name = x;
        stu[x].m = g;
    }
    for(int i = 0; i < n; i++)
    {
    
    
        cin>>x>>g;
        stu[x].name = x;
        stu[x].f = g;
    }
    vector<student> v;
    for(unordered_map<string,student>::iterator it = stu.begin(); it != stu.end(); it++)
    {
    
    
        student now = it->second;
        now.cla();
        if(now.p >= 200 && now.ave >= 60) v.push_back(now);
    }
    sort(v.begin(), v.end());
    for(vector<student>::iterator it = v.begin(); it != v.end(); it++)
    {
    
    
        student y = *it;
        cout<<y.name<<' '<<y.p<<' '<<y.m<<' '<<y.f<<' '<<y.ave<<'\n';
    }
    return 0;
}

1081 检查密码

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    
    
    int n;
    cin>>n;
    getchar();
    while(n--)
    {
    
    
        string s;
        getline(cin,s);
        int len = s.size();
        if(len < 6) cout<<"Your password is tai duan le."<<'\n';
        else
        {
    
    
            int ok = 0, num = 0, zimu = 0;
            for(int i = 0; i < len; i++)
            {
    
    
                if((s[i] >= 'a' && s[i] <='z') || (s[i] >= 'A' && s[i] <= 'Z')) num = 1;
                else if(s[i] >= '0' && s[i] <= '9') zimu = 1;
                else if(s[i] == '.') continue;
                else ok = 1;
            }
            if(ok) cout<<"Your password is tai luan le."<<'\n';
            else if(num && !zimu) cout<<"Your password needs shu zi."<<'\n';
            else if(zimu && !num) cout<<"Your password needs zi mu."<<'\n';
            else cout<<"Your password is wan mei."<<'\n';
        }
    }
    return 0;
}

1082 射击比赛

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
    
    
    int n;
    cin>>n;
    getchar();
    string x = "", y = "";
    int minx = 30000, maxx = 0;
    while(n--)
    {
    
    
        string t;
        int tx,ty;
        cin>>t>>tx>>ty;
        if(tx*tx + ty*ty > maxx) maxx = tx*tx + ty*ty, x = t;
        if(tx*tx + ty*ty < minx) minx = tx*tx + ty*ty, y = t;
    }
    cout<<y<<' '<<x<<'\n';
    return 0;
}

1083 是否存在相等的差

在这里插入图片描述

#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 1e4 + 7;
int vis[maxn];
int main()
{
    
    
    int n;
    cin>>n;
    for(int i = 1; i <= n; i++)
    {
    
    
        int x;
        cin>>x;
        if(x > i) vis[x-i]++;
        else vis[i-x]++;
    }
    for(int i = maxn; ~i; i--)
        if(vis[i] > 1) cout<<i<<' '<<vis[i]<<'\n';
    return 0;
}

1084 外观数列

在这里插入图片描述

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    
    
    int n,d;
    cin>>d>>n;
    string now = to_string(d);
    for(int i = 1; i < n; i++)
    {
    
    
        string later = "";
        for(int j = 0; j < now.size();)
        {
    
    
            int k = j + 1;
            while(now[j] == now[k] && k < now.size()) k++;
            later += now[j] + to_string(k-j);
            j = k;
        }
        now = later;
    }
    cout<<now<<'\n';
    return 0;
}

1085 PAT单位排行

在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
struct school{
    
    
    string name;
    int cnt;
    double grade;
    school() : cnt(0), grade(0){
    
    }
    bool operator < (const school &t) const{
    
    
        if(grade != t.grade) return grade > t.grade;
        if(cnt != t.cnt) return cnt < t.cnt;
        return name < t.name;
    }
};
int main()
{
    
    
    int n;
    cin>>n;
    getchar();
    unordered_map<string,school> hash;
    while(n--)
    {
    
    
        string x,name;
        double score;
        cin>>x>>score>>name;
        for(int i = 0; i < name.size(); i++) name[i] = tolower(name[i]);
        if(x[0] == 'T') score *= 1.5;
        if(x[0] == 'B') score /= 1.5;
        hash[name].name = name;
        hash[name].cnt++;
        hash[name].grade += score;
    }
    vector<school> schools;
    unordered_map<string,school>::iterator it;
    for(it = hash.begin(); it != hash.end(); it++)
    {
    
    
        school s = it->second;
        s.grade = (int)(s.grade+1e-9);
        schools.push_back(s);
    }
    sort(schools.begin(),schools.end());
    cout<<schools.size()<<'\n';
    int rank = 1;
    for(int i = 0; i < schools.size(); i++)
    {
    
    
        school s = schools[i];
        if(i && s.grade != schools[i-1].grade) rank = i + 1;
        printf("%d %s %d %d\n",rank,s.name.c_str(),(int)s.grade,s.cnt);
    }
    return 0;
}

1086 就不告诉你

在这里插入图片描述

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
int main()
{
    
    
    ll x,y;
    cin>>x>>y;
    ll ans = x*y;
    vector<int> v;
    while(ans > 0)
    {
    
    
        v.push_back(ans%10);
        ans /= 10;
    }

    int pos;
    for(int i = 0; i < v.size(); i++)
       if(v[i]) pos = i, i = v.size() + 1;
    for(int i = pos; i < v.size(); i++)
        printf("%d",v[i]);
    if(!v.size()) puts("0");
    return 0;
}

1087 有多少不同的值

在这里插入图片描述

#include <iostream>
#include <cmath>
#include <set>
using namespace std;
int main()
{
    
    
    int n;
    cin>>n;
    set<int> s;
    for(int i = 1; i <= n; i++)
    {
    
    
        int t = floor(i/2) + floor(i/3) + floor(i/5);
        s.insert(t);
    }
    cout<<s.size()<<'\n';
    return 0;
}

1088 三人行

在这里插入图片描述

#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
using namespace std;
string Judge(double a, double b)
{
    
    
    if(a > b)  return "Gai";
    if(a < b)  return "Cong";
    return "Ping";
}

int main()
{
    
    
    int my,x,y;
    cin>>my>>x>>y;
    for(int i = 99; i > 9; --i)
    {
    
    
        int j = (i%10)*10 + i/10;
        double k = abs(i -j)*1.0/x;
        if(j == k*y)
        {
    
    
            cout<<i<<' '<<Judge(my,i)<<' '<<Judge(my,j)<<' '<<Judge(my,k)<<'\n';
            return 0;
        }
    }
    cout<<"No Solution"<<'\n';
    return 0;
}

1089 狼人杀-简单版

在这里插入图片描述

#include <iostream>
using namespace std;
int q[110];
int work(int x, int a, int b)  //真话返回0 假话返回 1
{
    
    
    int t = q[x];
    if(t > 0)  //不是狼人
    {
    
    
        if(t == a || t == b) return 1;
        return 0;
    }
    t = -t;
    if(t == a || t == b) return 0;
    return 1;
}
int main()
{
    
    
    int n;
    cin>>n;
    for(int i = 1; i <= n; i++) cin>>q[i];
    for(int i = 1; i <= n; i++)
        for(int j = i + 1; j <= n; j++)
        {
    
    
            int s = work(i, i, j) + work(j, i, j);
            if(s != 1) continue;
            
            s = 0;
            for(int k = 1; k <= n; k++)
                s += work(k, i, j);
            if(s != 2) continue;
            cout<<i<<' '<<j<<'\n';
            return 0;
        }
    cout<<"No Solution"<<'\n';
    return 0;
}

1090 危险品装箱

在这里插入图片描述

#include <iostream>
#include <set>
using namespace std;
const int maxn = 1e4 + 7;
struct node{
    
    
    int x,y;
}a[10007];
int main()
{
    
    
    int n,m;
    cin>>n>>m;
    for(int i = 0; i < n; i++)
    {
    
    
        int tx,ty;
        cin>>tx>>ty;
        a[i] = {
    
    tx, ty};
    }
    while(m--)
    {
    
    
        int k;
        cin>>k;
        set<int> v;
        v.clear();
        for(int i = 0; i < k; i++)
        {
    
    
            int tx;
            cin>>tx;
            v.insert(tx);
        }
        int ok = 0;
        for(int i = 0; i < n; i++)
        {
    
    
            int x = a[i].x, y = a[i].y;
            if(v.find(x) != v.end() && v.find(y) != v.end()) ok = 1;
        }
        if(ok) cout<<"No"<<'\n';
        else cout<<"Yes"<<'\n';
    }
    return 0;
}

1091 N-自守数

在这里插入图片描述

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    
    
    int n;
    cin>>n;
    while(n--)
    {
    
    
        int x;
        cin>>x;
        int t = x*x;
        string a = to_string(x);
        reverse(a.begin(),a.end());
        
        int ok = 0;
        for(int i = 0; i < 10; i++)
        {
    
    
            int tx = t*i, ty = t*i;
            string b = "";
            while(tx)
            {
    
    
                b += to_string(tx%10);
                tx /= 10;
                if(a == b)
                {
    
    
                    cout<<i<<' '<<ty<<'\n';
                    ok = 1;
                    break;
                }
            }
            if(ok) break;
        }
        if(!ok) cout<<"No"<<'\n';
    }
    return 0;
}

1092 最好吃的月饼

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
int a[1007];
int main()
{
    
    
    int n,m;
    cin>>n>>m;
    for(int i = 0; i < m; i++)
        for(int j = 0; j < n; j++)
        {
    
    
            int x;
            cin>>x;
            a[j] += x;
        }
    int maxn = 0;
    for(int i = 0; i < n; i++)
        if(a[i] > maxn) maxn = a[i];
    cout<<maxn<<'\n';
    int ok = 0;
    for(int i = 0; i < n; i++)
        if(a[i] == maxn && !ok) ok = 1, cout<<i+1;
        else if(a[i] == maxn && ok) cout<<" "<<i+1;
    return 0;
}

1093 字符串A+B

在这里插入图片描述

#include <iostream>
#include <cstring>
#include <set>
using namespace std;
int main()
{
    
    
    string a, b, ans = "";
    getline(cin,a);
    getline(cin,b);
    set<char> s;
    for(int i = 0; i < a.size(); i++)
        if(s.size() == 0) 
        {
    
    
            ans += a[i];
            s.insert(a[i]);
        }
        else
        {
    
    
            if(s.find(a[i]) == s.end())
            {
    
    
                ans += a[i];
                s.insert(a[i]);
            }
        }
    
    for(int i = 0; i < b.size(); i++)
        if(s.find(b[i]) == s.end())
        {
    
    
            ans += b[i];
            s.insert(b[i]);
        }
    cout<<ans<<'\n';
    return 0;
}

1094 谷歌的招聘

在这里插入图片描述

#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 4e4 + 7;
bool st[maxn];
int primes[maxn], cnt;
void Init()
{
    
    
    for(int i = 2; i <= maxn; i++)
    {
    
    
        if(!st[i]) primes[cnt++] = i;
        for(int j = 0; primes[j] <= maxn/i; j++)
        {
    
    
            st[primes[j]*i] = true;
            if(i%primes[j] == 0) break;
        }
    }
}
bool check(int x)
{
    
    
    for(int i = 0; primes[i] <= x/primes[i]; i++)
        if(x%primes[i] == 0) return false;
    return true;
}
int main()
{
    
    
    Init();
    string ch;
    int l, k;
    cin>>l>>k>>ch;
    for(int i = 0; i + k <= l; i++)
    {
    
    
        int t = stoi(ch.substr(i,k));
        if(check(t))
        {
    
    
            cout<<ch.substr(i,k)<<'\n';
            return 0;
        }
    }
    cout<<"404"<<'\n';
    return 0;
}

1095 解码PAT准考证

在这里插入图片描述

#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 1e4 + 7;
struct node{
    
    
    string id;
    int grade;
    bool operator < (const node &t)const{
    
    
        if(grade != t.grade) return grade > t.grade;
        return id < t.id;
    }
};
node p[maxn];
int main()
{
    
    
    int n,m;
    cin>>n>>m;
    for(int i = 0; i < n; i++) cin>>p[i].id>>p[i].grade;
    
    for(int i = 1; i <= m; i++)
    {
    
    
        string op,x;
        cin>>op>>x;
        cout<<"Case "<<i<<": "<<op<<' '<<x<<'\n';
        if(op == "1")
        {
    
    
            vector<node> v;
            v.clear();
            for(int i = 0; i < n; i++)
                if(p[i].id[0] == x[0]) 
                    v.push_back(p[i]);
                
            if(v.size() == 0) cout<<"NA"<<'\n';
            sort(v.begin(),v.end());
            for(vector<node>::iterator it = v.begin(); it != v.end(); it++)
            {
    
    
                node now = *it;
                cout<<now.id<<' '<<now.grade<<'\n';
            }
        }
        else if(op == "2")
        {
    
    
            int cnt = 0, tot = 0;
            for(int i = 0; i < n; i++)
            {
    
    
                string temp = p[i].id.substr(1, 3);
                if(temp == x) 
                {
    
    
                    cnt++;
                    tot += p[i].grade;
                }
            }
            if(!cnt) cout<<"NA"<<'\n';
            else cout<<cnt<<' '<<tot<<'\n';
        }
        else
        {
    
    
            vector<node> v;
            unordered_map<string,int>hash;
           
            for(int i = 0; i < n; i++)
            {
    
    
                string temp = p[i].id.substr(4,6);
                if(temp == x) hash[p[i].id.substr(1,3)]++;
            }
            
            vector<node>::iterator it;
            unordered_map<string,int>::iterator y;
        
            for(y = hash.begin(); y != hash.end(); y++)
            {
    
    
                node now;
                now.id = y->first;
                now.grade = y->second;
                v.push_back(now);
            }
            if(v.size() == 0) cout<<"NA"<<'\n';
            else
            {
    
    
                sort(v.begin(),v.end());
                for(it = v.begin(); it != v.end(); it++)
                {
    
    
                    node z = *it;
                    cout<<z.id<<' '<<z.grade<<'\n';
                }
            }
        }
    }
    return 0;
}

结语

这一百题基本上没怎么考算法,更多的是熟练掌握 S T L STL STL 以及提高代码模拟水平,适合小白练习。

猜你喜欢

转载自blog.csdn.net/Edviv/article/details/109584445
PTA
今日推荐