【牛客训练记录】牛客2025年情人节比赛
训练情况

赛后反思
今年比赛比去年有意思多了,太搞笑了
A题
我们构造一对就可以了,和为 \(x\),直接扔上去 \(1\) 和 \(x-1\) 即可
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int x; cin>>x;
cout<<1<<endl;
cout<<1<<" "<<x-1<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
B题
好抽象的题,SHA-256加密后奇偶性和输出一样,我随便输了个 1,一看还对上了,就直接交了
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
cout<<"1";
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
D题
这题能hack掉的点在于map<int,int>,里面sum可能会超过int,所以我们int溢出刚好为零的情况,4294967296 这个数刚好溢出为 0,我们直接让sum出现溢出为 0 的情况即可 WA 了
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
int a[10000] = {2,3,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,38,39,40,46};
void solve(){
map<int,int> v;
for(int i = 0;i<34;i++) v[a[i]] = 1;
cout<<49<<endl;
for(int i = 1;i<=49;i++){
if(v[i]){
cout<<6<<endl;
cout<<(int)1e9<<" ";
cout<<(int)1e9<<" ";
cout<<(int)1e9<<" ";
cout<<(int)1e9<<" ";
cout<<(int)294967296<<" ";
cout<<0<<" ";
cout<<endl;
} else {
cout<<1<<endl;
cout<<1<<endl;
}
}
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
E题
太经典了,数组开小了,我们直接数据压满查询即可爆 RE
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
int a[10000] = {2,3,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,38,39,40,46};
void solve(){
map<int,int> v;
for(int i = 0;i<34;i++) v[a[i]] = 1;
cout<<49<<endl;
for(int i = 1;i<=49;i++){
if(v[i]){
cout<<2e4<<" "<<1<<" "<<2e4<<endl;
for(int j = 1;j<=2e4;j++) cout<<1<<" ";
cout<<endl;
} else {
cout<<1<<" "<<1<<" "<<1<<endl;
cout<<1<<endl;
}
}
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
F题
好一个暴力求和,我们直接数据压满就超时了
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
int a[10000] = {2,3,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,38,39,40,46};
void solve(){
map<int,int> v;
for(int i = 0;i<34;i++) v[a[i]] = 1;
cout<<49<<endl;
for(int i = 1;i<=49;i++){
if(v[i]){
cout<<1e4<<" "<<1e4<<endl;
for(int j = 1;j<=1e4;j++) cout<<1<<" ";
cout<<endl;
for(int j = 1;j<=1e4;j++) cout<<1<<" "<<1e4<<endl;
cout<<endl;
} else {
cout<<1<<" "<<1<<endl;
cout<<1<<endl;
cout<<1<<" "<<1<<endl;
}
}
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
G题
盲猜了一个这题加密用了hash,由于秘钥范围有限,直接枚举ka和kb,去找能和答案匹配的,我们发现 ka = 5,kb = 6的时候能对上,直接hash输出就行
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
string s; cin>>s;
int ka = 5;
int kb = 6;
for(int i = 0;i<s.size();i++){
if(s[i] >= 'a' && s[i] <= 'z'){
cout<<(char)(((s[i]-'a')*ka+kb)%26+'a');
} else {
cout<<(char)(((s[i]-'A')*ka+kb)%26+'A');
}
}
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
H题
翻阅日历可知,2027情人节是周日
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
cout<<"2027";
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
K题
题目暗示了低头看键盘,我们直接面向样例编程,我们发现给出的字母答案就是它周围的字母,我们直接大力分类讨论即可
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
string s; cin>>s;
if(s == "A") cout<<"QWSZ";
else if(s == "B") cout<<"VGHN";
else if(s == "C") cout<<"XDFV";
else if(s == "D") cout<<"REFSXC";
else if(s == "E") cout<<"WSDR";
else if(s == "F") cout<<"RTDGCV";
else if(s == "G") cout<<"TYFHVB";
else if(s == "H") cout<<"YUGJBN";
else if(s == "I") cout<<"UJKO";
else if(s == "J") cout<<"UIHKNM";
else if(s == "K") cout<<"IOJLM";
else if(s == "L") cout<<"POK";
else if(s == "M") cout<<"NJK";
else if(s == "N") cout<<"BHJM";
else if(s == "O") cout<<"IKLP";
else if(s == "P") cout<<"OL";
else if(s == "Q") cout<<"WA";
else if(s == "R") cout<<"EDFT";
else if(s == "S") cout<<"WEADZX";
else if(s == "T") cout<<"RFGY";
else if(s == "U") cout<<"YHJI";
else if(s == "V") cout<<"CFGB";
else if(s == "W") cout<<"QASE";
else if(s == "X") cout<<"ZSDC";
else if(s == "Y") cout<<"TGHU";
else if(s == "Z") cout<<"ASX";
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}

浙公网安备 33010602011771号