训练情况
赛后反思
几场比赛一起开导致不会做简单题了,CD感觉都不难
A题
蛇有十一画,直接输出 11
点击查看代码
#include <iostream>
using namespace std;
int main()
{cout<<11;return 0;
}
B题
我们发现无论是长宽除二,面积也会除二,但是这题除二的前提条件是为偶数,所以我们记录长宽能除的次数,再和面积除的次数比较,判断最后面积是否相等即可
点击查看代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'using namespace std;void solve(){int n,x; cin>>n>>x;for(int i = 1;i<=n;i++){int a,b; cin>>a>>b;if(a*b<x||(a*b)%x){cout<<"No"<<endl;continue;}int aa = a,bb = b;int cnt1 = 0,cnt2 = 0,cnt3 = 0;while(aa%2==0) aa/=2,cnt1++;while(bb%2==0) bb/=2,cnt2++;int res = a*b/x;while(res%2==0) res/=2,cnt3++;if(res==1 && cnt1 + cnt2 >= cnt3) cout<<"Yes"<<endl;else cout<<"No"<<endl;}
}signed main(){// int T; cin>>T; while(T--)solve();return 0;
}
C题
这题看似移动复杂,我们只需要考虑最大值和最小值,它们两一定会往中间走,所以求最大值和最小值的中点即可
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;void solve(){int n; cin>>n;int ma = 0,mi = INT_MAX;for(int i = 1;i<=n;i++){int x; cin>>x;ma = max(ma,x);mi = min(mi,x);}cout<<(ma+mi)/2<<endl;
}signed main(){// int T; cin>>T; while(T--)solve();return 0;
}
D题
数列变为有序,这题只需要求数列的第 \(k\) 大,我们先进行排序求出第 \(k\) 大,接下来遍历数列内的元素,如果当前位置不是第 \(i\) 大则需要操作一次移动到最后面,否则就比较第 \(i+1\) 大
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;void solve(){int n; cin>>n;vector<int> a(n + 1),b(n + 1);for(int i = 1;i<=n;i++) cin>>a[i],b[i] = a[i];sort(b.begin() + 1,b.end());int pos = 1;int ans = 0;for(int i = 1;i<=n;i++){if(a[i] != b[pos]) ans++;else pos++;}cout<<ans<<endl;
}signed main(){// int T; cin>>T; while(T--)solve();return 0;
}