日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

codeforces 711B - Chris and Magic Square(矩阵0位置填数)

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codeforces 711B - Chris and Magic Square(矩阵0位置填数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://codeforces.com/problemset/problem/711/B

題目大意:

  輸入 n ,輸入 n*n 的矩陣,有一個占位 0 , 求得將 0 位置換成其他的整數 使得矩陣 行列斜 和全部相等。

代碼狀態:

?

一把辛酸淚

?2016.09.24 8:14 再次更新 ?DOWN 【昨天晚上的‘杯具’要謹記,做題要看懂題,看清題的要求再做,切記、切記、切記】

補解題思路:

1.

 1.1 先特殊判斷 n 是否==1,如果等于 1 則直接輸出 1 即可

 1.2 如果 n > 1 判斷 0 的位置在哪個位置,找一個要填入到0位置的數。

    如果 0 在第一行,那么用第二行的和 減去 第一行的和,便是要填入的值.

    如果 0 在最后一行,那么用倒數第二行的和 減去 最后一行的和,便是要填入的值.

    其他的 則 0 在中間位置 ,那么可以用 前一行或者后一行的和 減去 0 所在的和,便是要填入的值.

    (用列減也可以)

    【看清題意,如果填入的值 <1 則輸出 -1】

2.?

  將要填入的值填到 0 的位置 進行全部的掃描判斷即可。全盤的掃描不在解釋。

AC Code:

1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=500+5; 4 typedef long long ll; 5 ll na[N][N]; 6 int check(int n) 7 { 8 ll ans=0,ans1=0; 9 int i,j; 10 for(i=1; i<=n; i++) 11 ans+=na[1][i],ans1+=na[i][1]; 12 if(ans!=ans1) 13 return 0; 14 ans1=0; 15 ll ans2=0; 16 for(i=1; i<=n; i++) 17 { 18 for(j=1; j<=n; j++) 19 ans1+=na[i][j], ans2+=na[j][i]; 20 if(ans!=ans2||ans1!=ans2||ans!=ans1) 21 return 0; 22 ans1=ans2=0; 23 24 } 25 ans1=ans2=0; 26 for(i=1; i<=n; i++) 27 { 28 for(j=1; j<=n; j++) 29 if(i==j) 30 ans1+=na[i][j],ans2+=na[i][n-i+1]; 31 } 32 if(ans!=ans2||ans1!=ans2||ans!=ans1) 33 return 0; 34 return 1; 35 } 36 int main() 37 { 38 int n; 39 while(~scanf("%d",&n)) 40 { 41 int i,j; 42 if(n==1) 43 { 44 scanf("%d",&n); 45 printf("1\n"); 46 continue; 47 } 48 int x,y; 49 for(i=1; i<=n; i++) 50 for(j=1; j<=n; j++) 51 { 52 scanf("%d",&na[i][j]); 53 if(na[i][j]==0)x=i,y=j; 54 } 55 ll ans=0,ans1=0; 56 if(x==1) 57 { 58 for(i=1; i<=n; i++) 59 ans+=na[1][i],ans1+=na[2][i]; 60 na[x][y]=ans1-ans; 61 } 62 else if(x==n) 63 { 64 for(i=1; i<=n; i++) 65 ans+=na[n][i],ans1+=na[n-1][i]; 66 na[x][y]=ans1-ans; 67 } 68 else 69 { 70 for(i=1; i<=n; i++) 71 ans+=na[x][i],ans1+=na[x-1][i]; 72 na[x][y]=abs(ans1-ans); 73 } 74 75 if(check(n)) 76 printf("%I64d\n",na[x][y]<1?-1:na[x][y]); 77 else printf("-1\n"); 78 } 79 return 0; 80 }

?

轉載于:https://www.cnblogs.com/A--Q/p/5901984.html

總結

以上是生活随笔為你收集整理的codeforces 711B - Chris and Magic Square(矩阵0位置填数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。