- 孟令轩1 的博客
真题
- @ 2025-7-26 11:05:39
[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;
}