首页 > 其他分享 >洛谷暴力枚举

洛谷暴力枚举

时间:2024-02-04 16:22:27浏览次数:21  
标签:洛谷 暴力 start int sum ++ 枚举 num return

暴力枚举一点也不暴力,洛谷题单最后三题还是没做出来,题解也没看懂讲的都是什么搜索七七八八的,看来只能后面学了回来补。

个人感觉其实暴力枚举就是要尽可能地压榨运行时间,然后用的也是什么递归搜索for之类的

1.统计方形

a.如果只是单纯的数格子这种根本不可能做的出来,仔细发现若把每个点当作正方形的一个顶点那么这样子就不会重复,比如当作右下角的话就只要算他的左上方斜对角的点,其余的与他相连都是长方形

2.烤鸡

我十连for循环做的...看题解好像得用搜索,又只能后面补了

3.三连击

for循环把每一个的基数弄出来后面乘对应的比例,之后把三个数逐一拆解,判断是不是唯一,是的话就输出

4.选数

递归来获取不重复的三个数然后来相加,看代码吧,最近码力真的要加强了

int rule(int choose_left_num,int already_sum,int start,int end){//choose_left_num为剩余的k,already_sum为前面累加的和,start和end为全组合剩下数字的选取范围;调用递归生成全组合,在过程中逐渐把K个数相加,当选取的数个数为0时,直接返回前面的累加和是否为质数即可
    if(choose_left_num==0)return isprime(already_sum);
    int sum=0;
    for(int i=start;i<=end;i++){
        sum+=rule(choose_left_num-1,already_sum+x[i],i+1,end);
    }
    return sum;

  

5.组合的输出

和上一题有异曲同工之秒啊

void dfs(int k){//搜索第k个数
    int i;
    if(k>r){
        for(i=1;i<=r;i++){
            cout<<setw(3)<<a[i];//输出,场宽为三
        }
        cout<<endl;
        return ;//回到前一层
    }
    for(i=a[k-1]+1;i<=n;i++){
        a[k]=i;
        dfs(k+1);//直接进行下一次调用
    }
}

  

6.全排列

用一个函数就好了 next_permutation可以把[start,next)这个数组排序为下一个字典序的数组

7.火星人

也是用上一题说的函数,for循环它然后输出

8.涂国旗

没啥说的就三连for了,三连for的依据是按照边界,然后再第三层for里面用三个并列的for循环来获取要改变的格子数

9.first step

不懂说啥了感觉万变不离其宗了

int n, m, r, ans, dx[2] = {0, 1}, dy[2] = {1, 0};
char mapq[105][105];
void skim(int x, int y, int i, int j) {
	if (j > r) {
		++ans;
		return ;
	}
	if (mapq[x][y] != '.' || x < 0 || y < 0 || x >= n || y >= m)
		return ;
	skim(x + dx[i], y + dy[i], i, j + 1);
	return ;
}
int main() {
	cin >> n >> m >> r;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> mapq[i][j];
		}
//		cin >> map[i];
	}

	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			if (mapq[i][j] == '.')
				for (int k = 0; k < 2; k++)
					skim(i, j, k, 1);
	if (r == 1)
		ans /= 2;
	cout << ans << endl;
	return 0;
}

  

10.回文质数

这个不说了

11.火柴棒不等式

先数组开一个表示每一个数字的火柴数,然后两个for循环,再把每一个数字逐一拆开

#include <bits/stdc++.h>
using namespace std;int nu[10]={6,2,5,5,4,5,6,3,7,6};
int matches(int num){    
         int i,k=0;       
         for(i=num;i!=0;i/=10)k+=nu[i%10];
         if(num==0)k+=nu[0];
         return k;
}
int main(){
    int i,j,all=0,n;    
    cin>>n;     
        for(i=0;i<=800;i++)for(j=0;j<=800;j++)if(matches(i)+matches(j)+matches(i+j)+4==n)all++;    //如果这个算式加起来的火柴棒总数刚好用完所有火柴棒就把数量往上加
        cout<<all;
        return 0;
}

  

 

标签:洛谷,暴力,start,int,sum,++,枚举,num,return
From: https://www.cnblogs.com/sixsix666/p/18006448

相关文章

  • 洛谷题单指南-递推与递归-P1002 [NOIP2002 普及组] 过河卒
    原题链接:https://www.luogu.com.cn/problem/P1002题意解读:从A(0,0)点走到B(n,m)点,只能向右或者向下,C点以及其控制点不能走。解题思路:根据题意,此题要么递归(DFS),要么递推(动态规划)先分析数据规模,最大从起点到终点要走40步,每个步有2种走法,一共240种路径,DFS会超时,且方案数必须用longlong......
  • 洛谷排序
    排序:从小到大冒泡排序--->时间超过109 就超时查看代码#include<bits/stdc++.h>//从小到大usingnamespacestd;typedeflonglongintll;constintN=1e5+6;lla[N];lln;intmain(){cin>>n;for(inti=1;i<=n;i++)cin>>a[i];for(inti=1;i<=n;i++){for(int......
  • 洛谷题解-P1194 买礼物
    https://www.luogu.com.cn/problem/P1194题目描述又到了一年一度的明明生日了,明明想要买BBB样东西,巧的是,这BBB样东西价格都是AAA元。但是,商店老板说最近有促销活动,也就是:如果你买了第III样东西,再买第JJJ样,那么就可以只花KI,JK_{I,J}KI,J​元,更巧的是,KI,JK_{I,J}K......
  • 【洛谷 P2249】【深基13.例1】查找(向量+二分查找+递归)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......
  • 洛谷P5907 数列求和加强版 / SPOJ MOON4
    题面描述求\[\sum_{i=1}^ni^ka^i\]对\(998244353\)取模的结果。\(O(k)\)做法为了推导方便,下令\(p=a^{-1}\)。即求\[\sum_{i=1}^n\frac{i^k}{p^i}\]我们裂项,即尝试寻找多项式\(f(x)\),使得\[\frac{x^k}{p^x}=\frac{f(x)}{p^{x-1}}-\frac{f(x+1)}{p^x}\]即\[x^k......
  • 【洛谷 P2249】【深基13.例1】查找(向量+lower_bound)
    【深基13.例1】查找题目描述输入个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,然后进行次询问。对于每次询问,给出一个整数,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出。输入格式第一行个整数和,表示数字个数和询问次数。第二行......
  • 洛谷排序算法题单
    可能是因为这个题单比较简单,感觉很快就写完了,然后就写一些能想到的东西。1.最后一题拼接可以用两个字符串相加然后按字典序排序,这样就可以按照最大数排了2.有一个两个数据很大的可以到100位,也是把他放在字符串先比较长度,长度一样再根据字典序来排列3.然后有些什么某某条件满足......
  • 洛谷题单指南-暴力枚举-P2392 kkksc03考前临时抱佛脚
    原题链接:https://www.luogu.com.cn/problem/P2392题意解读:由于可以同时计算两道同一科的题目,只需要把某一科题目分两堆,使得两堆总时长之差最小,时长较大的一堆就是完成这一科的最短时间。解题思路:既然直到了要把一科题目分两堆,关键是如何分堆呢?比较容易犯的错是用贪心来解题:把......
  • 洛谷 『STA - R4』保险丝
    比赛结束前20多秒过掉,真刺激传送门description给定一棵大小为\(n\)的树。一个点\(x\)的权值\(f(x)\)定义为\(\sum\limits_{u\in\text{subtree}(x),P(x,u)}\prod\limits_{v\in\text{subtree(u)},P(x,v)}fib_{\text{dgr}_v}\)。其中\(P(x,u)\)表示根节点到\(v\)......
  • 洛谷题单指南-暴力枚举-P3799 妖梦拼木棒
    原题链接:https://www.luogu.com.cn/problem/P3799题意解读:要选四根木棒拼成等边三角形,必然有两根长度相等,其余两根长度之和等于前两根解题思路:木棒总数最大100000,每根最长5000,因此通过枚举其中两根木棒的长度,计算出另外两根的长度,通过各个长度的木棒数进行选择。设数组h[n]保......