【牛客训练记录】牛客小白月赛110
训练情况

赛后反思
C题没看到偶数,导致打错表了TAT,然后浪费了一点时间
A题
编号每 \(500\) 一组,我们分别除 \(500\) 和取模 \(500\) 就行了
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int x; cin>>x;
x--;
cout<<(char)(x/500+'A');
printf("%.3d",x%500+1);
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
B题
我们对答案字符串中的每一个字母都记录一下,对猜的答案如果对应位相同则是 g,如果出现过这个字母是 y,否则就是 r
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
string s,t;
cin>>s>>t;
map<char,bool> v;
for(int i = 0;i<s.size();i++) v[s[i]] = 1;
for(int i = 0;i<s.size();i++){
if(s[i] == t[i]) cout<<"g";
else if(v[t[i]]) cout<<"y";
else cout<<"r";
}
cout<<endl;
if(s==t) cout<<"congratulations"<<endl;
else cout<<"defeat"<<endl;
}
signed main(){
// int T; cin>>T; while(T--)
solve();
return 0;
}
C题
数位和是 \(3\) 的倍数和被 \(3\) 整除是等效的,所以我们考虑枚举 \(3,5\) 倍数打表,做公差发现循环节为 \(7\),并且两个循环节之间对应位差 \(30\),我们直接按照规律计算即可
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
void solve(){
int x; cin>>x;
int a = (x-1)%7;
int b = (x-1)/7;
if(a==0) cout<<3+30*b<<endl;
else if(a==1) cout<<5+30*b<<endl;
else if(a==2) cout<<9+30*b<<endl;
else if(a==3) cout<<15+30*b<<endl;
else if(a==4) cout<<21+30*b<<endl;
else if(a==5) cout<<25+30*b<<endl;
else if(a==6) cout<<27+30*b<<endl;
}
signed main(){
int T; cin>>T; while(T--)
solve();
return 0;
}

浙公网安备 33010602011771号