目录
1.L1-091 程序员买包子
#include<iostream>
using namespace std;
int n,m,k;
string x;
signed main(){
cin>>n>>x>>m>>k;
if (k==n) cout<<"mei you mai "<<x<<" de";
else if (k==m) cout<<"kan dao le mai "<<x<<" de";
else cout<<"wang le zhao mai "<<x<<" de";
return 0;
}
2.L1-092 进化论
#include<iostream>
using namespace std;
int n;
int a,b,c;
signed main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>c;
if (a*b==c ){
cout<<"Lv Yan"<<endl;
}else if (a+b==c){
cout<<"Tu Dou"<<endl;
}
else if (a*b!=c && a+b!=c){
cout<<"zhe du shi sha ya!"<<endl;
}
}
return 0;
}
3.L1-093 猜帽子游戏
#include<iostream>
using namespace std;
int n,k;
int arr[110];
int res[110];
// 对arr 和 res的前n个结果进行判断
//每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。
//用数字 1 表示黑色、2 表示黄色之外,0 表示这个宝宝弃权不猜。
bool check(int n){
bool errors=false,bingo=false;
for(int i=1;i<=n;i++){
if (res[i]==0) continue;
if (res[i]==arr[i]) bingo=true;
else errors=true;
}
if (bingo && !errors) return true;
return false;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>arr[i];
}
cin>>k;
for(int i=0;i<k;i++){
for(int j=1;j<=n;j++){
cin>>res[j];
}
if (check(n)){
cout<<"Da Jiang!!!"<<endl;
}
else {
cout<<"Ai Ya"<<endl;
}
}
return 0;
}
4.L1-094 剪切粘贴
解析:
注意string相关的API及其边界即可。
#include<iostream>
#include<string>
using namespace std;
string inits;
int n;
string a,b;
int starts,overs;
signed main(){
cin>>inits;
cin>>n;
for(int i=0;i<n;i++){
cin>>starts>>overs>>a>>b;
string cut=inits.substr(starts-1,overs-starts+1);
string findStr=a+b;
// 切掉
inits.erase(starts-1,overs-starts+1);
// 插入
int pos=inits.find(findStr);
if (pos != string::npos){
// 也可以找到第一个b所在的index进行插入
inits.insert(pos+a.size(),cut);
} else {
inits+=cut;
}
}
cout<<inits<<endl;
return 0;
}
5.L1-095 分寝室
解析:
将男女每个寝室分配人数,在2-Nx之间进行枚举即可,然后得到人数差最小的方案
题目奇怪的是10^5数据范围的情况下,n^2算法不会超时,应该数据范围太弱了
#include<iostream>
#include<algorithm>
using namespace std;
#define debug(x) cout<<"变量"<<#x<<"的值是"<<x<<endl;
int n0,n1,n;
int res=1e5+10;
bool flag=false;
int value=-1;
signed main(){
cin>>n0>>n1>>n;
for(int i=2;i<=n0;i++){
if(n0%i==0){
for(int j=2;j<=n1;j++){
if (n1%j==0 && n0/i+n1/j==n && abs(i-j)<res){
res=abs(i-j);
value=i;
flag=true;
break;
}
}
}
}
if (flag){
cout<<n0/value<<" "<<n-n0/value<<endl;
}else {
cout<<"No Solution"<<endl;
}
return 0;
}
6.L1-096 谁管谁叫爹
#include<iostream>
using namespace std;
//#define int long long
int n;
int a,b;
inline int calcOne(int num){
int sum=0;
while(num){
sum+=num%10;
num/=10;
}
return sum;
}
signed main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b;
int sa,sb;
sa=calcOne(a);
sb=calcOne(b);
if (a%sb==0 && b%sa!=0){
cout<<"A"<<endl;
}else if (a%sb!=0 && b%sa==0){
cout<<"B"<<endl;
}else {
if (a>b) cout<<"A"<<endl;
else cout<<"B"<<endl;
}
}
return 0;
}
7.L1-097 编程解决一切
#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>
//#include<sstream>
//#include<cctype>
using namespace std;
signed main(){
cout<<"Problem? The Solution: Programming.";
return 0;
}
8.L1-098 再进去几个人
#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>
//#include<sstream>
//#include<cctype>
using namespace std;
int a,b;
signed main(){
cin>>a>>b;
cout<<b-a;
return 0;
}
9.L1-099 帮助色盲
解析:
这道题很恶心的是,题目描述很垃圾
其一、对于输入数据描述不一致。前面提到“前方两米内有人”,后面又是“前方两米内是否有同向行走的人”,实际上这两个表述的都是后者的意思。
其二、对于部分情况不交代。比如在黄灯时,提示音不工作,但是色盲怎么执行策略,这个逻辑没有提出。应该是按照生活常识,经历“绿灯-黄灯-红灯-绿灯”的过渡,默认黄灯也要停止。所以在非绿灯时,行人都应该停止前进。(哪怕是在红灯时,有同向行人闯红灯,也要停下来)
感觉命题组出题审查不够全面,每年L1系列都会出一道含义模糊的题面,不知道是故意的还是确实语文水平有待提高。
#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>
//#include<sstream>
//#include<cctype>
using namespace std;
int laten_color; // 0 表示红灯、1 表示绿灯、2 表示黄灯
int status; // 取值为 0 表示前方两米内没有同向行走的人、1 表示有。
signed main(){
cin>>laten_color>>status;
// 当前交通灯为红灯或绿灯时
if (laten_color == 0 || laten_color == 1) {
// 有同向行走的人,则患者自己可以判断不提示
if(status) cout<<"-"<<endl<<( laten_color == 1 ? "move":"stop")<<endl;
else {
if (laten_color) cout<<"dudu"<<endl<<"move"<<endl;
else cout<<"biii"<<endl<<"stop"<<endl;
}
// 黄灯必须停止,这里题目没说明
} else cout<<"-"<<endl<<"stop"<<endl;
return 0;
}
10.L1-100 四项全能
#include<iostream>
#include<iomanip>
#include<vector>
#include<cmath>
#include<utility>
#include<algorithm>
//#include<sstream>
//#include<cctype>
using namespace std;
int n,m,tmp,sum = 0;
vector<int> person_num;
signed main(){
cin>>n>>m;
for(int i=0;i<m;i++) {
cin>>tmp;
sum +=tmp;
}
int k = sum / n; // 最大值为m
if (k>= m-1) {
cout<<sum - n*(m-1)<<endl;
} else cout<<0;
return 0;
}