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