Codeforces Round 978 (Div. 2)

A. Bus to Pénjamo

#include<iostream>
using namespace std;
#include<algorithm>

int a[110];
int n,r;
int main(){
int T;cin>>T;
while(T--){
cin>>n>>r;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);

int b=0;int ans=0;
for(int i=1;i<=n;i++){
    r-=a[i]/2;if(a[i]&1)b++;ans+=a[i]-(a[i]%2);
}
if(r>=b){
    ans+=b;
}else {
    ans+=2*r-b;
}
cout<<ans<<endl;
}


}

B. Kar Salesman

上限为c,彼此不同,最少分组max(mx,sum/c上取整)

#include<iostream>
using namespace std;
#define int long long
int n,x;
int a[500010];
signed main(){
int T;cin>>T;
while(T--){
    cin>>n>>x;int sum=0;int mx=0;
    for(int i=1;i<=n;i++){scanf("%d",&a[i]);sum+=a[i];mx=max(mx,a[i]);}

    cout<<max(mx,(sum+x-1)/x)<<endl;
}


}

和Codeforces Round 975 (Div. 2)C. Cards Partition同一个结论

枚举答案也就是上限c,
上限为c,彼此不同,最少分组max(mx,sum/c上取整),看能不能补齐
c能补齐,比c小的定能补齐,比c大的不一定能补齐

#include<iostream>
using namespace std;
#include<algorithm>
#define ll long long
ll n,k;
ll a[200010];

int main(){
ll T;cin>>T;
while(T--){
    cin>>n>>k;ll sum=0;
    for(ll i=1;i<=n;i++){scanf("%lld",&a[i]);sum+=a[i];}
    sort(a+1,a+n+1);
ll c=n;
    for(;c>=1;c--){
        ll M=max(a[n],(sum+c-1)/c);
        ll nd=c*M-sum;
        if(nd<=k)break;
    }
    cout<<c<<endl;

}

}

D1. Asesino (Easy Version)

两个相互问,只有有冒牌货才会两个的回答不同
如果是奇数的话,最多提前问(n-1)/22次,再问2次,n+1次
问到最后也没有,(n-1)/2
2次,n-1次
如果是偶数的话,最多提前问n-2次,再问2次,n次
问到最后也没有,n-2次,再问两次,n次

#include<iostream>
using namespace std;

int n;

int main(){
int T;cin>>T;
while(T--){
    cin>>n;int res=-1;
    for(int i=1;i+1<=n;i+=2){
        cout<<"? "<<i<<" "<<i+1<<endl;fflush(stdout);
        int t1;cin>>t1;
        cout<<"? "<<i+1<<" "<<i<<endl;fflush(stdout);
        int t2;cin>>t2;
        if(t1!=t2){
            res=i;break;
        }
    }
    if(n&1&&res==-1){
        res=n;
        cout<<"! "<<n<<endl;
        continue;
    }
    int ans;
    if(res>=2){
        cout<<"? "<<1<<" "<<res<<endl;fflush(stdout);
        int t1;cin>>t1;
cout<<"? "<<res<<" "<<1<<endl;fflush(stdout);
        int t2;cin>>t2;
        if(t1!=t2){ans=res;}else ans=res+1;
    }else {
  cout<<"? "<<n<<" "<<res<<endl;fflush(stdout);
        int t1;cin>>t1;
cout<<"? "<<res<<" "<<n<<endl;fflush(stdout);
        int t2;cin>>t2;
        if(t1!=t2){ans=res;}else ans=res+1;
    }
    cout<<"! "<<ans<<endl;

}

}
posted @ 2025-07-10 13:12  arin876  阅读(15)  评论(0)    收藏  举报