日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > uva 1393 Highway

uva 1393 Highway

來源:程序員人生   發布時間:2016-11-19 14:13:03 閱讀次數:2686次

Problem:
給定1個m*n的點陣,求最少穿過兩個點的直線有多少條?
Solution:
把每條直線看成是1個盒子的對角線,那末我們可以枚舉不同大小的盒子,找到盒子的不同位置,然后去除盒子在同1條直線上的情況。
1. 枚舉盒子的左上角,對每個盒子有(m-a)(n-b)種情況。
2. 左上角有盒子致使對角線重復的有(m⑵a)(n⑵b)種情況(不同等于兩邊相加,由于盒子內也能夠有頂點)。
3. 終究乘2,由于有兩條對角線。
note:
1. 互素不1定就非得用歐拉定理,要靈活使用。
2. 要把模型正確的轉換和抽象,方便理解。
3. 對反復使用的元素要打表存儲起來。

#include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> using namespace std; const int maxs = 300; bool g[maxs+1][maxs+1]; int gcd(int a, int b){ a = abs(a); b = abs(b); while(b != 0){ int t = a%b; a = b; b = t; } return a; } void make_phi_table(){//0互素 int m,n; memset(g,0,sizeof(g)); for(int i = 1; i <= maxs; ++i){ for(int j = i; j <= maxs; ++j){ if(g[i][j]==0 && gcd(i,j)==1){ m = i+i; n = j+j; while(m<=maxs && n<=maxs){ g[m][n] = g[n][m] = 1; m += i; n += j; } } } } } int main() { int n, m; make_phi_table(); while(cin >> n >> m && n) { int ans = 0; for(int a = 1; a <= m; a++) for(int b = 1; b <= n; b++) if(g[a][b] == 0) { int c = max(0, m-2*a) * max(0, n-2*b); ans += (m-a)*(n-b) - c; } cout << ans*2 << "\n"; } return 0; }

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品www | 美女视频网站色 | 国产精品精品视频 | 手机看片日韩 | 国产精品一区二区三区四区 | 乱码一区 | 三级视频在线播放 | 国产高清精品一区二区三区 | 91视频你懂的 | 九色最新网址 | 成人一区视频 | 欧美夜夜| 麻豆国产| 日韩一区二区电影 | 亚洲乱码国产乱码精品精 | 国产精品国产精品国产专区不片 | 男女网站在线观看 | 中文字幕二区 | 国产99久久九九精品 | 亚洲 欧美 日韩 在线 | 国产偷久久一级精品60部 | 亚洲性猛交xxxx乱大交 | 日韩精品一区二区在线 | 在线观看亚洲人 | 久久er99热精品一区二区 | 中日韩在线观看 | 污黄网站 | 麻豆视频一区二区 | 亚洲免费一区二区 | 成人在线一区二区 | 国产美女被遭强高潮免费网站 | 欧美视频一级片 | 天堂中文资源在线观看 | av入口| 中文字幕成人网 | 久久国产欧美一区二区三区精品 | 国产精品欧美在线 | 丁香婷婷网 | 国产精品久久久久久久久久久久久 | 成人午夜天 | 综合久久综合 |