zoukankan      html  css  js  c++  java
  • SGU 106 The equation

    分情况讨论

    扩展欧几里得

    代码是按别人的思路改的。。

      1 /*Author :usedrose  */
      2 /*Created Time :2015/7/25 14:51:42*/
      3 /*File Name :2.cpp*/
      4 #include <cstdio>
      5 #include <iostream>
      6 #include <algorithm>
      7 #include <sstream>
      8 #include <cstdlib>
      9 #include <cstring>
     10 #include <climits>
     11 #include <vector>
     12 #include <string>
     13 #include <ctime>
     14 #include <cmath>
     15 #include <deque>
     16 #include <queue>
     17 #include <stack>
     18 #include <set>
     19 #include <map>
     20 #define INF 0x3f3f3f3f
     21 #define eps 1e-8
     22 #define pi acos(-1.0)
     23 #define MAXN 1110
     24 #define OK cout << "ok" << endl;
     25 #define o(a) cout << #a << " = " << a << endl
     26 #define o1(a,b) cout << #a << " = " << a << "  " << #b << " = " << b << endl
     27 using namespace std;
     28 typedef long long LL;
     29 
     30 void exgcd(LL a, LL b, LL &d, LL &x, LL &y)
     31 {
     32     if (!b) d = a, x = 1, y = 0;
     33     else {
     34         exgcd(b, a%b, d, y, x);
     35         y -= x*(a/b);
     36     }
     37 }
     38 
     39 int main()
     40 {
     41     //freopen("data.in","r",stdin);
     42     //freopen("data.out","w",stdout);
     43     cin.tie(0);
     44     ios::sync_with_stdio(false);
     45     LL a, b, c, d, x, y, x1, x2, y1, y2;
     46     while (cin >> a >> b >> c) {
     47         cin >> x1 >> x2 >> y1 >> y2;
     48         if (a == 0 || b == 0) {
     49             if (a == 0 && b) {
     50                 if (c%b || c/b > y2 || c/b < y1) cout << "0" << endl;
     51                 else cout << x2 - x1 + 1 << endl;
     52             }
     53             else if (b == 0 && a) {
     54                 if (c%a || c/a > x1 || c/b < x1) cout << "0" << endl;
     55                 else cout << y2 - y1 + 1 << endl;
     56             } 
     57             else {
     58                 if (c) cout << "0" << endl;
     59                    else cout << (x2 - x1 + 1)*(y2 - y1 + 1) << endl;    
     60             }
     61         }
     62         else {
     63             if (c < 0) c = -c;
     64             else a = -a, b = -b;
     65             if (a < 0) {
     66                 a = -a;
     67                 x1 = -x1;
     68                 x2 = -x2;
     69                 swap(x1, x2);
     70             }
     71             if (b < 0) {
     72                 b = -b;
     73                 y1 = -y1;
     74                 y2 = -y2;
     75                 swap(y1, y2);
     76             }
     77             if (a < b) exgcd(b, a, d, y, x);
     78             else exgcd(a, b, d, x, y);
     79             if (c%d) {
     80                 cout << "0" << endl;
     81                 continue;
     82             }
     83             a /= d, b /= d, c /= d;
     84             //小优化
     85             while(x < x1) x += b, y -= a;
     86             while(x > x2) x -= b, y += a;
     87             LL ans = 0;
     88             bool in = false;
     89             x *= c, y *= c;
     90             while (x <= x2) {
     91                 if (x >= x1 && x <= x2 && y >= y1 && y <= y2) {
     92                     in = true;
     93                     break;
     94                 }    
     95                 x += b, y -= a;
     96             }
     97             while (!in && x >= x1) {
     98                 if (x >= x1 && x <= x2 && y >= y1 && y <= y2) { 
     99                     in = true;
    100                     break;
    101                 }    
    102                 x -= b, y += a;
    103             } 
    104             if (in) {
    105                 ans += min((x2-x)/b, (y-y1)/a);
    106                 ans += min((x-x1)/b, (y2-y)/a);
    107             }
    108             cout << ans + in << endl;
    109         }
    110     }
    111     return 0;
    112 }
    View Code
  • 相关阅读:
    【JVM性能调优】检测最耗cpu的线程的脚本
    JUC之ThreadPoolExecutor实现原理
    HashMap实现原理
    JUC之阻塞队列BlockingQueue的实现原理
    dubbo实践
    .net 技术基础
    日志等级
    CentOS 笔记(六) 历史命令 自动补充
    CentOS 笔记(五) 常用工具
    CentOS 笔记(二) 端口占用,进程查看
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4676068.html
Copyright © 2011-2022 走看看