首页 > 其他分享 >C - Counting Squares -- ATCODER

C - Counting Squares -- ATCODER

时间:2022-10-31 12:36:10浏览次数:44  
标签:ATCODER Squares -- two abc275 int second dx Counting

C - Counting Squares

https://atcoder.jp/contests/abc275/tasks/abc275_c

参考: https://atcoder.jp/contests/abc275/submissions/36103954

 

思路

首先不能使用暴力穷举法,任意四个点来判断,是否被标注,是否为正方形。

81*80*79*78/(4*3*2) 复杂度太大。

 

按边计数法:

对于任何正方形,可以扣住左边或者左下边的边来统计个数,防止重复计算。

 

 

 

对于这种边, 可以方便地计算另外连个点:

T1 T2

 

 

 

Code

https://atcoder.jp/contests/abc275/submissions/36110355

 

 
map<int, map<int, bool>> pawns;
vector<pair<int, int>> points;
 
int main()
{
    for(int i=1; i<=9; i++){
        string temp;
        cin >> temp;
        
        for(int j=1; j<=9; j++){
            char one = temp[j-1];
            if (one == '#'){
                pawns[j][i] = true;
                points.push_back(make_pair(j, i));
            }
        }
    }
 
    int sum = 0;
    
    int size = points.size();
    for(int i=0; i<size; i++){
        pair<int, int> one = points[i];
        
        for (int j=i+1; j<size; j++){
            pair<int, int> two = points[j];
 
            if(one.second<two.second
            && one.first<=two.first){
                // for every point,
                // first means row
                // second means column
//                cout << "one point = " << one.first << " " << one.second << endl;
//                cout << "two point = " << two.first << " " << two.second << endl;
 
                // first group of points
                // right down side
                // one -> two
                int dx = two.first - one.first;
                int dy = two.second - one.second;
                int t1x = two.first + dy;
                int t1y = two.second - dx;
 
                int t2x = t1x - dx;
                int t2y = t1y - dy;
 
                if(pawns[t1x][t1y] && pawns[t2x][t2y]){
//                    cout << "t1:" << t1x << " " << t1y << endl;
//                    cout << "t2:" << t2x << " " << t2y << endl;
                    sum++;
                }
            }
        }
    }
 
    cout << sum << endl;
 
    return 0;
}

 

标签:ATCODER,Squares,--,two,abc275,int,second,dx,Counting
From: https://www.cnblogs.com/lightsong/p/16843877.html

相关文章

  • Pandas速查手册中文版
    关键缩写和包导入df:任意的PandasDataFrame对象s:任意的PandasSeries对象同时我们需要做如下的引入:importpandasaspdimportnumpyasnp导入数据-pd.read_csv(filename)......
  • Linux:Ubuntu 防火墙操作
    1.查看防火墙当前状态ufwstatus2.开启防火墙ufwenable3.关闭防火墙ufwdisable4.查看防火墙版本ufwversion5.默认允许外部访问本机ufwdefaultallow6.......
  • 高等数学介绍
    高等数学:架构图:详细介绍:  ......
  • 2020终究不是平凡的一年
    2020-1024=996对于程序员来说,真的好不平凡啊。......
  • 【atcoder 293 F - Erase Subarrays】【动态规划】
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{publicstaticvoidmain(String[]args)......
  • 机器学习的发展(初级算法梳理一)
    2016年3月,阿尔法围棋与围棋世界冠军、职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜.深度学习开始进行大众的视野中.深度学习其实是机器学习的一个分支,我们今天......
  • 你怎么设计一个线程安全的Servlet?
    1.最直接的办法,就是用上面的SingleThreadModel接口既然单例会有共享实例变量导致线程不安全的问题,那就改成多例的呗。但是,这个接口都已经被官方废弃了,这就说明官方也不推荐......
  • JAVA面试官:请说说如何设计线程安全的单例模式?
    单例模式已经被讲烂了,这边复习一下双重检测锁下的线程安全的单例模式。(单例模式复习顶配)publicclassMySingleton{privatestaticvolatileMySingletonmySingleto......
  • 一些碎碎念
    找回账号密码了(不是生活在一个容错率这样低的环境,或许停下就是不允许的吧。不知道什么时候我们的青春就“奉献”给了高考,也不知道它什么时候成了所谓的唯一的出路。你国......
  • 你能证明Servlet线程不安全吗?
    Servlet默认是线程不安全的!Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。  当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml......