前言:没写完,只写了前面几个水题……
A题:很简单,输入+算各位和+排序+输出,全员AC
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n+1];
int t;
int sum;
for(int i=1;i<=n;i++){
cin>>t;
sum=0;
while(t>0){
sum+=t%10;
t/=10;
}
a[i]=sum;
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
cout<<a[i]<<' ';
}
return 0;
}
B题:因为只有一副对联不全,所以排序之后查找。如果一副对联是全的,那么它应该与他后面的尺寸相等(i=i+1),如果不一致就是缺(好像有点难懂)
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i+=2){
if(a[i]!=a[i+1]){
cout<<a[i];
return 0;
}
}
return 0;
}
C题,有难度,但是不多。对结束时间进行排序,如果一个节目的开始时间晚于或等于上一个观看节目的结束时间(a[x].si>=a[i].ei),就可以看(似乎也有点难懂)
代码:
#include <bits/stdc++.h>
using namespace std;
struct node{
int si,ei;
}a[208201];
bool cmp(node x,node y){
return x.ei<y.ei;
}
bool vis[208201];
int sum=1;
int m;
bool pd(int x){
for(int i=x-1;i>=1;i--){
if(vis[i]){
if(a[x].si>=a[i].ei){
return true;
}
else{
return false;
}
}
}
}
int main(){
cin>>m;
for(int i=1;i<=m;i++){
cin>>a[i].si>>a[i].ei;
}
sort(a+1,a+m+1,cmp);
vis[1]=true;
for(int i=2;i<=m;i++){
if(pd(i)){
sum++;
vis[i]=true;
}
}
cout<<sum;
return 0;
}
E题:这道题有难度,正解应该用二分答案(当然你用歪门邪道也是可以过去的),这里只讲二分。
先说思路:从1~1e9(1000000000)之间二分,如果这个时间可以使每个集装箱风干,我们就移动右指针(r=mid-1)看看时间能否更短,反之就移动左指针(l=mid+1)
那么如何判断时间是否够呢?要分三种情况
1.可以自然风干:不必管他
2.用吸尘器清理Xs后正好可以清除:time+=(box[i]-midXa)/b;(X是乘号)
3.用吸尘器清理Xs后还需要再清一次:time+=(box[i]-midXa)/b+1;
然后把所花费的时间加起来然后判断就可以了
还有一点很重要:开LONG LONG(不开会0分)
代码:
#include<bits/stdc++.h>
using namespace std;
long long n,a,b;
int box[10000001];
bool check(long long mid){
long long time=0;
for(int i=1;i<=n;i++){
if(box[i]<=mid*a){
continue;
}
else{
if((box[i]-mid*a)%b==0){
time+=(box[i]-mid*a)/b;
}
else{
time+=(box[i]-mid*a)/b+1;
}
}
}
return time<=mid;
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>box[i];
}
long long l=1,r=1e9,mid,ans;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<ans;
return 0;
}
G题:一道数论题,让我们看看怎么推出来的
step 1:a^2-b^2=(a+b)(a-b)=>a+b与a-b奇偶性相同
step 2:所以(a+b)(a-b)要么是奇数,要么是4的倍数
step 3:couple number要么是奇数,要么是4的倍数
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n1,n2,sum=0;
cin>>n1>>n2;
for(int i=n1;i<=n2;i++){
if(i%4==0||i%2!=0){
sum++;
}
}
cout<<sum;
return 0;
}