A
题意 考试考好了要去庆祝 去A 店 B 店两个都去人数 判断一下就好了
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main(){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
if(a+b-c>d-1||c>a||c>b) {
printf("-1\n");
return 0;
}
else printf("%d\n",d-a-b+c);
return 0;
}
B
题意 给你几个分数 你能把一个分数换成5 四舍五入 叫你求最小变换次数 排序模拟一遍就可以了
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX_N = 124;
int num[MAX_N];
int main(){
int n;
scanf("%d",&n);
float sum = 0;
for(int i=0;i<n;++i){
scanf("%d",&num[i]);
sum+=num[i];
}
sort(num,num+n);
int cnt = 0;
while(sum<(n*4.5)) {
sum+=(5-num[cnt]);
cnt++;
}
printf("%d\n",cnt);
return 0;
}
C模拟一下 秒二分
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define dbg(x) cout<<#x<<" = "<< (x)<< endl
long long n;
int check(long long mid){
long long eat_v = 0,eat_p = 0;
long long pre_n = n;
int flag = 0;
if(n%2==0) flag = 1;
while(pre_n>mid){
eat_v+=mid;
pre_n-=mid;
long long tmp = (long long)(1.0*pre_n/10+0.00000001);
//dbg(tmp);
eat_p+=tmp;
pre_n-=tmp;
//dbg(pre_n);
}
eat_v+=pre_n;
long long Cmp = (long long)(1.0*n/2+0.00000001);
if(!flag) Cmp++;
if(eat_v>=Cmp)
{
//dbg(eat_v);
//dbg(Cmp);
return 1;
}
else return 0;
}
int main(){
scanf("%I64d",&n);
int v= 0,p = 0;
long long l = 1,r=n;
while(l<=r){
//dbg(l);
//dbg(r);
long long mid = (l+r)>>1;
if(check(mid)) r=mid-1;
else l = mid + 1 ;
}
printf("%I64d\n",l);
return 0;
}
D贪心模拟一下就好
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N= 124;
char su[MAX_N],sd[MAX_N],tmp1[MAX_N],tmp2[MAX_N];
int main(){
scanf("%s",su);
scanf("%s",sd);
int len = strlen(su);
for(int i=1;i<=len;i++){
tmp1[i] = su[i-1];
tmp2[i] = sd[i-1];
}
for(int i=1;i<=len;++i){
su[i] = tmp1[i];
sd[i] = tmp2[i];
}
su[0] = sd[0] = su[len+1]= sd[len+1]='X';
int cnt = 0;
for(int i=1;i<=len;i++){
if(su[i]=='0'){
if(sd[i]=='0'&&sd[i-1]=='0'){
cnt++;
su[i]=sd[i]=sd[i-1]='X';
continue;
}
else if(sd[i]=='0'&&sd[i+1]=='0'){
cnt++;
su[i]=sd[i]=sd[i+1]='X';
continue;
}
else if(su[i+1]=='0'&&sd[i]=='0'){
cnt++;
su[i]=su[i+1]=sd[i]='X';
continue;
}
else if(su[i+1]=='0'&&sd[i+1]=='0'){
cnt++;
su[i]=su[i+1]=sd[i+1]='X';
continue;
}
}
}
printf("%d\n",cnt);
}
E是个数位dp留着补
F目前无力