758C - Unfair Poll

    xiaoxiao2021-03-26  24

    题意:

    老师按顺序点名,询问提问次数最多,最少的和x,y位置的学生被提问的次数

    思路:

    每次以m(2n-2)为一轮,开始二分枚举。之后剩下的暴力枚举

    #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; typedef unsigned long long ll; ll mp[105][105]; int main() { ll n,m,k,x,y; cin>>n>>m>>k>>x>>y; ll mid,ans; ll l=0,r=k/n; ll turn=(n-1)*2*m; if(n==1) { turn=m; ans= k/turn; } else while(l<=r) { mid=(l+r)>>1; if( mid*turn>k ) r=mid-1; else ans=mid,l=mid+1; } k=k-ans*turn; for(int i=1; i<=n ;i++) { for(int j=1; j<=m;j++) { mp[i][j]+=ans; } } for(int i=n-1;i>1;i--) { for(int j=1;j<=m;j++) { mp[i][j]+=ans; } } for(int i=1;k&&i<=n ;i++) for(int j=1;k&&j<=m;j++) k--,mp[i][j]++; for(int i=n-1;k&&i>1;i--) for(int j=1;k&&j<=m;j++) k--,mp[i][j]++; ll minn=1e18,maxx=0,res=0; res=mp[x][y]; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { maxx=max(mp[i][j],maxx); minn=min(mp[i][j],minn); } } cout<<maxx << " "<< minn <<" "<<res<<endl; }

    转载请注明原文地址: https://ju.6miu.com/read-663047.html

    最新回复(0)