本周做了小白月赛7,早就发现自己连小白都不算,蔡队出的题目真是毒瘤。A题一开始就wa300多发秀的飞起。
本人比较菜,做了6题,基本在思考为什么wa,无限改代码,头疼。
A、送分题。
表面送分,我没看代码,就看到输入一个整数,输出一个整数。上来直接字符串输入输出--wa,复制代码?递归超内存。把题目代码自己跑一下发现小于20180001都加上2017,大于等于的都是20182017。
#include<bits/stdc++.h>
//#include<iostream>
//#include<algorithm>
#define sc(x) scanf("%d",&x)
#define pr(x) printf("d",x)
typedef long long ll;
using namespace std;
int main(){
ll a;
cin>>a;
if( a < 20180001 ){
a = a + 2017;
}
else{
a = 20182017;
}
cout<<a;
return 0;
}
C、谁是神射手
就是算概率。这个很多符号打不出来就算了,百度也能搜到,牛客也有官方题解。算一下两边的概率作比较就可以了。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a1 , b1;
cin>>a1>>b1;
double a = (double)a1 / 100;
double b = (double)b1 / 100;
double pa = a / ( a + b - a * b );
double pb = b * ( 1 - a ) / ( a + b - a * b );
if( pa > pb ){
cout<<"MWH";
}
else if( pa < pb ){
cout<<"CSL";
}
else{
cout<<"equal";
}
return 0;
}
E、app的超能力
这题也不难,每n个变为一个加上去就行了,但是要考虑的是m==1&&n!=1还有n==1的特例。我在这里wa了很多次,最后才ac。
#include<bits/stdc++.h>
//#include<iostream>
//#include<algorithm>
#define sc(x) scanf("%d",&x)
#define pr(x) printf("d",x)
typedef long long ll;
using namespace std;
int main(){
ll n , m;
ll i , j;
cin>>n>>m;
if( m == 1 && n!= 1 ){
cout<<"No";
}
else if( n == 1 ){
cout<<"Yes";
}
else{
ll cnt = n;
while( cnt >= m ){
cnt = cnt / m + cnt % m ;
}
if( cnt == 1 ){
cout<<"Yes";
}
else{
cout<<"No";
}
}
return 0;
}
F、bfs
表面bfs,实际上是瞎搞题,数据范围也不大,暴力也可以,stl有find函数也可以用。各种姿势过去,虽然我一开始段错误两发,用python3过的。python3也有find函数。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++)
s[i]=tolower(s[i]);
int ans=s.find("bob");
cout<<ans<<endl;
}
G、分苹果
这题一开始我就常规做法,但是一直wa了很多发,测了很多数据也过了可是就是不能ac,最后突然醒悟是一个01背包而已。容积为总质量的一半。重量价值也设为一样。
#include<bits/stdc++.h>
//#include<iostream>
//#include<algorithm>
#define sc(x) scanf("%d",&x)
#define pr(x) printf("d",x)
typedef long long ll;
using namespace std;
int main(){
int T , M;
int i , j;
int w[1001] , v[1001] , f[10001];
cin>>M;
// fill( w , w + 1001 , 1 );
int sum = 0;
for(i = 1 ; i <= M; i++){
cin>>v[i];
w[i] = v[i];
sum += v[i];
}
int arv = sum / 2;
T = arv;
for(i = 1 ; i <= M; i++){
for(j = T ; j >= w[i]; j--){
f[j] = max(f[j] , f[j - w[i]] + v[i]);
}
}
// cout<<sum<<endl;
f[T] = max( f[T] , sum - f[T] );
cout<<sum - f[T]<<" "<<f[T];
return 0;
}
I、建立文档。
一眼望过去还以为是什么线段树操作,小白赛应该也不会出这种。然后发现并没有想象中的那么难。可以用set维护记录,模拟题。我用的不是set,鉴于之前也有写过set的博客,这里放上set写的ac代码。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
char op[10];
set<int> s;
for (int i = 0; i < n; i++) s.insert(i + 1);
while (n--)
{
scanf("%s", op);
if (op[0] == 'N')
{
printf("%d\n", *s.begin());
s.erase(s.begin());
}
else
{
static int x;
scanf("%d", &x);
if (s.find(x) == s.end())
{
puts("Successful");
s.insert(x);
}
else
puts("Failed");
}
}
}
来自菜鸡的记录。