hey_left 6 Codeforces Round 886 (Div. 4)
A.
判总和-最小值的差是否大等于10即可
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
void solve(){
int a,b,c;cin>>a>>b>>c;
int ans=a+b+c;
ans-=min({a,b,c});
if(ans>=10){
cout<<"YES"<<'\n';
}else cout<<"NO"<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--) {
solve();
}
return 0;
}
B.
在小等于10的里面找质量最大的
遍历一遍即可
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
void solve(){
int n;cin>>n;
int ma=-1,ans=-1;
for(int i=1,a,b;i<=n;i++){
cin>>a>>b;
if(a<=10){
if(b>=ma){
ma=b;
ans=i;
}
}
}
cout<<ans<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--) {
solve();
}
return 0;
}
C.
把图输入后,按列遍历,把不是'.'的push进一个字符串里,输出字符串
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
char g[10][10];
void solve(){
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
cin>>g[i][j];
}
}
string s="";
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
if(g[j][i]!='.')s.push_back(g[j][i]);
}
}
cout<<s<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--) {
solve();
}
return 0;
}
D.
先升序排序,然后求最大的连续的满足条件的子序列的长度x
答案为总数-x
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N];
void solve(){
int n,k;cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
int ma=1,tmp=1;
for(int i=2;i<=n;i++){
if(a[i]-a[i-1]<=k){
tmp++;
}else{
ma=max(ma,tmp);
tmp=1;
}
if(i==n){
ma=max(ma,tmp);
}
}
ma=n-ma;
cout<<ma<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--) {
solve();
}
return 0;
}
E.
二分边框长度,看是否满足
数据过大,需要__int128,wa了好多发
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
#define int long long
int a[N];
__int128 s[N];
void solve(){
int n,c;cin>>n>>c;
for(int i=1;i<=n;i++){
cin>>a[i];s[i]=a[i];
}
__int128 l=0,r=1e18,mid;
__int128 ans=0;
while(l<=r){
mid=(l+r)/2;
int sum=c;
//cout<<"sum="<<sum<<'\n';
bool f=0;
for(int i=1;i<=n;i++){
if(sum-(s[i]+2*mid)*(s[i]+2*mid)<0){
f=1;
break;
}
sum-=(s[i]+2*mid)*(s[i]+2*mid);
}
// cout<<"sum="<<sum<<'\n';
if(f==1)r=mid-1;
else if(sum==0){
ans=mid;
break;
}
else l=mid+1;
}
cout<<(int)(ans)<<'\n';
}
signed main(){
int hey_left=1;
cin>>hey_left;
while(hey_left--) {
solve();
}
return 0;
}