[GESP202303 二级] 百鸡问题

#include<bits/stdc++.h>
using namespace std;
int main(){
   int x,y,z,n,m;
   cin>>x>>y>>z>>n>>m;
   int ans=0;
   for(int i = 0;i<=m;i++){
      for(int j = 0;j<=m-i;j++){
         if(x*i+y*j+(m-i-j)/z==n&&(m-i-j)%z==0)ans++;
      }
   }
   cout<<ans<<endl;
   return 0;
}

[GESP202306 三级] 春游

#include<bits/stdc++.h>
using namespace std;
int a[1010],ton[1010];
int main(){
   int n,m;
   cin>>n>>m;
   for(int i = 0;i<m;i++){
      cin>>a[i];
      ton[a[i]]=1;
   }
   int cnt = 0;
   for(int i = 0;i<n;i++){
      if(ton[i]==0){
         cout<<i<<" ";
      }else{
         cnt++;
      }
   }
   if(cnt == n){
      cout<<n;
   }
   return 0;
}

[GESP202406 四级] 黑白方块

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
   int n, m;
   cin >> n >> m;
   vector<vector<int>> grid(n, vector<int>(m));
   for (int i = 0; i < n; ++i) {
       string s;
       cin >> s;
       for (int j = 0; j < m; ++j) {
           grid[i][j] = (s[j] == '1') ? 1 : -1;
       }
   }
   vector<vector<int>> prefix(n + 1, vector<int>(m + 1, 0));
   for (int i = 1; i <= n; ++i) {
       for (int j = 1; j <= m; ++j) {
           prefix[i][j] = grid[i-1][j-1] + prefix[i-1][j] + prefix[i][j-1] - prefix[i-1][j-1];
       }
   }
   
   int max_area = 0;
   for (int c1 = 1; c1 <= m; ++c1) {
       for (int c2 = c1; c2 <= m; ++c2) {
           unordered_map<int, int> first_row;
           first_row[0] = 0;
           
           for (int r = 1; r <= n; ++r) {
               int sum = prefix[r][c2] - prefix[r][c1-1];
               if (first_row.count(sum)) {
                   int area = (r - first_row[sum]) * (c2 - c1 + 1);
                   if (area > max_area) {
                       max_area = area;
                   }
               } else {
                   first_row[sum] = r;
               }
           }
       }
   }
   
   cout << max_area << endl;
   return 0;
}

[GESP202309 四级] 变长编码

#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n;
char trs(int x){
   if(x>9){
      return x-10+'A';
   }else{
      return x+'0';
   }
}
signed main(){
   cin>>n;
   if(n==0){
      cout<<"00"<<'\n';
      return 0;
   }
   while(n>0){
      int t=n&127;
      if(n>127){
         t|=128;
      }
      cout<<trs(t>>4)<<trs(t&15)<<" ";
      n=(n>>7);
   }
   return 0;
}

[NOIP1999普及组] 回文数


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

// 将字符转换为数字
int charToNum(char c) {
    if(c >= '0' && c <= '9') return c - '0';
    return c - 'A' + 10;
}

// 将数字转换为字符
char numToChar(int n) {
    if(n >= 0 && n <= 9) return n + '0';
    return n - 10 + 'A';
}

// 检查是否是回文数
bool isPalindrome(string s) {
    for(int i = 0; i < s.size()/2; i++)
        if(s[i] != s[s.size()-1-i])
            return false;
    return true;
}

// N进制加法
string addInBase(string a, string b, int base) {
    string res;
    int carry = 0;
    for(int i = 0; i < a.size() || carry; i++) {
        int sum = carry;
        if(i < a.size()) sum += charToNum(a[i]);
        if(i < b.size()) sum += charToNum(b[i]);
        carry = sum / base;
        res += numToChar(sum % base);
    }
    return res;
}

int main() {
    int base;
    string num;
    cin >> base >> num;
    
    for(int step = 0; step <= 30; step++) {
        if(isPalindrome(num)) {
            cout << step << endl;
            return 0;
        }
        string rev = num;
        reverse(rev.begin(), rev.end());
        num = addInBase(num, rev, base);
    }
    
    cout << "Impossible" << endl;
    return 0;
}