ZOJ 2975 思维

题意 给出一个矩形 问在其中存在多少子矩形 其四个角上的字母是一样的

一开始暴力写了一发 先枚举行数 再枚举两个列数 再向下枚举行数 判断能否 没有意外的超时了

后来想了想 当我们已经确定两个列数的时候 向下寻找的时候 如果找到了tot条边与第一条边同字母 这些边可以组成(tot-1)*tot个矩形 使满足题意

为了避免重复寻找 需要一个map来记录 由于矩形的边最长100 我们存已经检索的字母*1000*1000+左列数*1000+右列数

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int n,m;
char a[300][300];
int main(){
    int t;
    scanf("%d",&t);
    while(t--)
    {
        map<int ,int >q;
        q.clear();
        int sum=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        scanf("%s",a[i]+1);
        for(int i=1;i<=n-1;i++)
        {
            for(int k=1;k<=m-1;k++)
            {
                for(int j=k+1;j<=m;j++)
                {
                    if(a[i][k]!=a[i][j])
                    continue;
                    int x=a[i][k]-‘A‘;
                    if(q[x*1000000+k*1000+j]!=0)
                    continue;
                    int tot=1;
                    for(int l=i+1;l<=n;l++)
                    {
                        if(a[l][j]==a[l][k]&&a[l][j]==a[i][j])
                        {
                            tot++;
                            q[x*1000000+k*1000+j]=1;
                        }
                    }
                    sum+=(tot-1)*tot/2;
                }
            }
        }
        printf("%d\n",sum);
    }
}

  

时间: 2024-10-14 00:19:08

ZOJ 2975 思维的相关文章

ZOJ 2975: Kinds of Fuwas

ZOJ 2975:  Kinds of Fuwas ///@author Sycamore, ZJNU ///@date 2017-02-07 #include<iostream> using namespace std; char mat[250][250]; int main() { int T,M,N; cin >> T; while (T--) { cin >> M >> N; int c = 0; for (int i = 0; i < M;

哈理工2015暑假集训 zoj 2975 Kinds of Fuwas

G - Kinds of Fuwas Time Limit:2000MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu SubmitStatusPracticeZOJ 2975 Description In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperity of China as well a

zoj 3672 思维题

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4915 真是老了,脑子不会动了,但是其实就算现在搜了题解A了,还是没总结出思维方式 三点: 1.segma(a[i]-b[i])必须是偶数,,因为其实每次操作都是相当于从segma(a[i]-b[i])里面减去2*delta 2.a[i]>=b[i] 题目说的很清楚,只能减去,所以这点必须满足 前两点都想到了,但是自己能举出反例,后来队友A掉了 3.max(a[i]-b[i])

ZOJ 2975 Kinds of Fuwas(暴力+排列组合)

Kinds of Fuwas Time Limit: 2 Seconds      Memory Limit: 65536 KB In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperity of China as well as becoming a festival for people all over the world. The official ma

ZOJ 3829 贪心 思维题

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题,自己智商不够,不敢搞,想着队友智商好,他们搞吧,但是没出来这题...... 以后任何时候,都自信点....该想的还是好好自己想,这类题感觉就是先去找性质,然后一点点找规律,如果必要的话,自己提出一点猜想,然后如果自己举不出来反例,就暂时认为是正确的 下午搞了一下午,发现还是悲剧,晚上参考了两个题解 http://blog.csdn.

D - The Lucky Week ZOJ - 3939 (思维)

题目链接: D - The Lucky Week  ZOJ - 3939 题目大意:幸运的星期指,星期一为每个月的1 or 11 or 21号.给出第一个幸运星期的时间,问从当前的日起开始.第n个的日期. 具体思路:我们通过打表可以发现,每隔400年,当前的这一天的星期和400年后的是相同的.所以我们先求出一个400年有多少个幸运的天数(1600-1999),然后判断当前的年份如果以1600年开始的话,往后n个幸运日是多少,然后再做差以原来的起点输出就可以了. AC代码: 1 #include<

Welcome Party ZOJ - 4109 (思维+并查集)

题目链接: Welcome Party  ZOJ - 4109 题目大意:给你T组测试样例,然后n个人,m个关系,每一个关系包括两个人,这两个人为好朋友,然后问你怎么安排顺序,使得整个队伍的友情损失度最小(当一个人放置时,如果他的前面中没有他的朋友,那么整个队伍的朋友损失度就会加1) 具体思路:首先用并查集求出每一个联通块,然后用一个超级汇点连向这些连通块的根,然后优先队列+bfs求出字典序最小的正解就可以了. AC代码: 1 #include<bits/stdc++.h> 2 using n

ZOJ 3962:Seven Segment Display(思维)

https://vjudge.net/problem/ZOJ-3962 题意:有16种灯,每种灯的花费是灯管数目,代表0~F(十六进制),现在从x开始跳n-1秒,每一秒需要的花费是表示当前的数的花费之和,问n-1秒后这段时间的花费总共是多少.跳到FFFFFFFF之后会跳回00000000. 思路:怀疑人生的题目.如果从平时计算[L,R]的花费,就计算[0,R] - [0,L-1]这样的角度来看,就会好做很多.同样如果跳到1LL<<32之后回到0,也分段考虑.这样写一个函数就可以计算了. 考虑三

ZOJ 3955:Saddle Point(思维)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3955 题意:给出一个n*m的矩阵,定义矩阵中的特殊点Aij当且仅当Aij是这一行最小的唯一元素,是这一列最大的唯一元素.删除一些行和列,剩下的元素构成的矩阵一共有(2^n-1)* (2^m-1)种,求这些矩阵的特殊点的个数. 思路:对于这种问题,可以考虑每一个点对答案的贡献. 其实就只是对于每一个点,找出在该行大于它的点的数目a,在该列大于它的点的数目b,然后该点对于答案