cf758c

来源:互联网 发布:js input 隐藏属性 编辑:程序博客网 时间:2024/05/21 07:54

题意老师提问问题,(1,1)表示第一排第一个。
(1,1)(1,2)(1,3)……(1,4)(1,5)
……
(n,1)(n,2)(n,3)……(n,n-1)(n,n)
(n-1,1)(n-1,2)(n-3,3)……(n-1,n-1)(n-1,n)
然后这么提问,问谁回答的最多,谁回答的最少,第(x,y)回答了多少
问题数是 1e18
座位长宽范围100以内

思路首先,不能用暴力模拟,1e18我以前搞过这类的题目,就是用余数来模拟,之前的循环都是一样的,就是找循环来模拟。

#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long LL;LL k;LL a[110][110];int main(){    LL n , m , x , y , yu , sha , sum ,ans , Max;    scanf("%I64d %I64d %I64d %I64d %I64d",&n , &m , &k , &x , &y);    if(n > 2)        sum = 2 * n * m - 2 * m;    else        sum = n * m;    yu = k % sum , sha = (k / sum);    LL tmp = yu;    //printf("sum = %I64d yu = %I64d\n",sum,yu);    int row = 1 , lie = 1 ;    for(int i = 1 ; i <= n && yu > 0 ; i++){        for(int j = 1 ; j <= m && yu > 0 ; j++){            a[i][j]++,yu--,ans++;        }    }    for(int i = n - 1 ; i > 1 && yu > 0 ; i--){        for(int j = 1 ; j <= m && yu > 0 ; j++){            a[i][j]++,yu--,ans++;        }    }    //printf("ans = %I64d\n",ans);    Max = -1;    for(int i = 1 ; i <= n ; i++){        for(int j = 1 ; j <= m ; j++){            if(a[i][j] > Max) Max = a[i][j];        }    }    //printf("Max = %I64d\n",Max);    if(n > 2){        //printf("yu = %I64d m = %I64d\n",yu,m);        if(tmp > m){            printf("%I64d ", Max + 2*sha);        }        else            printf("%I64d ",max(2*sha,Max));    }    else printf("%I64d ", Max + sha);    printf("%I64d",a[n][m] + sha);    if(n <= 2){        printf(" %I64d\n",a[x][y] + sha);    }    else{        if(x > 1 && x < n){            printf(" %I64d\n",a[x][y] + sha * 2);        }        else{            printf(" %I64d\n",a[x][y] + sha);        }    }    return 0;}

昨天心态爆炸,我本以为我不会喜欢令我感觉很操蛋的人。。。。。。
but。。。。。

今天上午两个dp不会,。。。。看题解也看不懂,智商捉急。

0 0
原创粉丝点击