day6

上午还是做四道题

T1

区域
【上机练习】
1、编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线
中水平线和垂直线交点的数目。如下图所示,在 10*10 的二维数组中,有“*”围住了 15
个点,因此面积为 15。

【样例输入】area.in
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 0
0 1 0 1 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
【样例输出】area.out
15

#include <bits/stdc++.h>
using namespace std;
int a[12][12];
int main()
{
    int sum=0;
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            a[i][j]=0;
    for(int i=0;i<12;i++)
    {
            a[i][0]=-1;
            a[0][i]=-1;
            a[i][11]=-1;
            a[11][i]=-1;
    }
    for(int i=1;i<11;i++)
        for(int j=1;j<11;j++)
        {
            cin>>a[i][j];
        }
     
    for(int i=1;i<11;i++)
        for(int j=1;j<11;j++)
        {
            if(a[i][j]==0&&a[i-1][j]==-1)
                a[i][j]=-1;
            if(a[i][j]==0&&a[i][j-1]==-1)
                a[i][j]=-1;
            if(a[i][j]==0&&a[i+1][j]==-1)
                a[i][j]=-1;
            if(a[i][j]==0&&a[i][j+1]==-1)
                a[i][j]=-1;               
        }
    for(int j=1;j<11;j++)
        for(int i=1;i<11;i++)
        {
            if(a[i][j]==0&&a[i-1][j]==-1)
                a[i][j]=-1;
            if(a[i][j]==0&&a[i][j-1]==-1)
                a[i][j]=-1;
            if(a[i][j]==0&&a[i+1][j]==-1)
                a[i][j]=-1;
            if(a[i][j]==0&&a[i][j+1]==-1)
                a[i][j]=-1;               
        }   
    for(int i=1;i<11;i++)
        for(int j=1;j<11;j++)
        {
            if(a[i][j]==0)
            sum++;
        }
    cout<<sum;        
}

整道题给人一种看的很明白,但是没有思路写;

关键在我这道题没用搜索还做了出来(doge

————————————————————————————————————————

T2

奇怪的电梯 洛谷P1135

2、奇怪的电梯(lift)
【问题描述】
大楼的每一层楼都可以停电梯,而且第 i 层楼(1<=i<=N)上有一个数字 Ki(0<=Ki<=N)。
电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果
不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5 代表了 Ki(K1=3,K2=3,......),从一
楼开始。在一楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有-2 楼。那么,
从 A 楼到 B 楼至少要按几次按钮呢?
【输入格式】
输入文件共有二行,第一行为三个用空格隔开的正整数,表示 N,A,B(1≤N≤200, 1 ≤
A,B≤N),第二行为 N 个用空格隔开的正整数,表示 Ki。
【输出格式】
输出文件仅一行,即最少按键次数,若无法到达,则输出-1

#include<bits/stdc++.h>
using namespace std; int n,A,B,cnt=10001;
int k[210];
bool b[210]={0};
int d[2]={1,-1}; void dfs(int x,int s)
{
if(x==B) cnt=min(s,cnt);
if(s>cnt) return; for(int i=0;i<2;i++){
int X=x+d[i]*k[x];
if(X>=1 && X<= n && b[X]){
s++;
b[x]=false;
dfs(X,s);
b[x]=true;
s--;
}
}
} int main(){
cin>>n>>A>>B; memset(b,true,sizeof(b));
for(int i=1;i<=n;i++) cin>>k[i]; b[A]=false;
if(A==B) cnt=0;
else dfs(A,0);
if(cnt==10001) cout<<-1;
else cout<<cnt;
return 0;
}

反复提交了好几次才发现少了memset(b,true,sizeof(b));
一直二十分。整体来说还是标准的深搜。

————————————————————————————————————————

T3

产生数    洛谷P1037

题目描述

给出一个整数 nnn(n<1030n \lt 10^{30}n<1030)和 kkk 个变换规则(k≤15k \le 15k≤15)。

规则:

  • 一位数可变换成另一个一位数。
  • 规则的右部不能为零。

例如:n=234n=234n=234。有规则(k=2k=2k=2):

  • 222->555
  • 333->666

上面的整数 234234234 经过变换后可能产生出的整数为(包括原数):

  • 234234234
  • 534534534
  • 264264264
  • 564564564

共 444 种不同的产生数。

现在给出一个整数 nnn 和 kkk 个规则。求出经过任意次的变换(000次或多次),能产生出多少个不同整数。

仅要求输出个数。

输入格式

第一行两个整数 n,kn,kn,k。

接下来 kkk 行,每行两个整数 xi,yix_i,y_ixi​,yi​。

输出格式

输出能生成的数字个数。

#include<iostream>
using namespace std;
string n;
int k,can[10][10];
int ans[500]={1};
int l=1,b[10]; void dfs(int x)
{
for(int i=0;i<l;i++)
ans[i]*=x;
for(int i=0;i<l;i++)
if(ans[i]>=10)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
while(ans[l]>0)
{
ans[l+1]=ans[l]/10;
ans[l]=ans[l]%10;
l++;
}
}
int main()
{
cin>>n>>k;
int x,y;
while(k--)
{
cin>>x>>y;
can[x][y]=1;
}
for(int v=0;v<10;v++)
for(int j=0;j<10;j++)
for(int i=0; i<10; i++)
if(i!=j&&j!=v&&i!=v)
if(can[i][v]==1&&can[v][j]==1) can[i][j]=1; int len=n.length();
for(int i=0; i<len; i++)
{
int n1=n[i]-'0',change=1;
for(int j=0;j<10;j++)
if(can[n1][j]==1&&n1!=j)
change++;
b[n1]=change;
}
for(int i=0;i<len;i++) dfs(b[n[i]-'0']);
for(int i=l-1;i>=0;i--) cout<<ans[i];
return 0;
}

颇为麻烦的一道题

第一眼上去以为会有规律,结果自己找了几个数据自己算,发现竟然是递推(bushi)。就写个提交,洛谷给我20分,竟然骗到了。

言归正传,首先搜索规则中可以变换的情况,还要用10来取模,如果发现得出的数与之前的相同,不能sum++了

————————————————————————————————————————

T4

家庭问题

【问题描述】
有 n 个人,编号为 1,2,......n,另外还知道存在 K 个关系。一个关系的表达为二元组(α,
β)形式,表示α,β为同一家庭的成员。
当 n,k 和 k 个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?
例如:n=6,k=3,三个关系为(1,2),(1,3),(4,5)
此时,6 个人组成三个家庭,即:{1,2,3}为一个家庭,{4,5}为一个家庭,{6}单独为
一个家庭,第一个家庭的人数为最多。

【输入格式】
文件的第一行为 n,k 二个整数(1≤n≤100)(用空格分隔)
接下来的 k 行,每行二个整数(用空格分隔)表示关系
【输出格式】
二个整数(分别表示家庭个数和最大家庭人数)

#include <bits/stdc++.h>
using namespace std;
int n,k;
int a,b;
int p[120],sum[120];
int search(int x){
if(p[x]!=x) p[x]=search(p[x]);
return p[x];
}
int main(){
cin>>n>>k;
int family=n;
int number=1;
for(int i=1;i<=n;i++){
p[i]=1;
p[i]++;
sum[i]=1;
}
while(k--){
cin>>a>>b;
a=search(a),b=search(b);
if(a!=b){
p[a]=b;
sum[b]+=sum[a];
family--;
number=max(number,sum[b]);
} }
cout<<family<<" "<<number;
return 0;
}

很正经的搜索回溯啦,

对家庭数和人数进行初始化,如果发现输入中重复出现的元素,说明二者可以算到一起(也就是合为一家)

计数也就减少一个,人数++。

2022寒假集训day6的更多相关文章

  1. 2022寒假集训day2

    day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...

  2. HZNU-ACM寒假集训Day6小结 线性DP

    线性DP 考虑一组硬币面值 1,5,11 给定W,求凑出W的最少硬币个数 我们记凑出n需要用到的最少硬币数量为f(n)   我们注意到了一个很棒的性质 : f(n)只与f(n-1) f(n-5) f( ...

  3. 2022寒假集训day5

    day5 五道栈的题加上字符串. 单调队列. T1 表达式括号匹配   洛谷P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@&q ...

  4. 2022寒假集训day4

    day4(day5补完的) 继续刷搜索方面的题, 初步了解了序列. T1 迷宫问题 题目描述设有一个 n*n 方格的迷宫,入口和出口分别在左上角和右上角.迷宫格子中分别放 0 和 1 ,0 表示可通, ...

  5. 2022寒假集训day3

    day3:四道检测题,花了大半天时间. T1 子集和问题 问题描述 子集和问题的一个实例为<S,c>.其中S={x1,x2,-,xn}是一个正整数的集合,c是一个正整数.子集和问题判定是否 ...

  6. LOJ #6074. 「2017 山东一轮集训 Day6」子序列

    #6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j. ...

  7. CSU-ACM寒假集训选拔-入门题

    CSU-ACM寒假集训选拔-入门题 仅选择部分有价值的题 J(2165): 时间旅行 Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中 ...

  8. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  9. 2019暑期金华集训 Day6 计算几何

    自闭集训 Day6 计算几何 内积 内积不等式: \[ (A,B)^2\le (A,A)(B,B) \] 其中\((A,B)\)表示\(A\cdot B\). (好像是废话?) 叉积 \[ A\tim ...

随机推荐

  1. 表达式树扩展 动态生成表达式树插件 Sy.ExpressionBuilder。

    CURD中,基础查询我感觉还是很烦人的一个浪费时间的工作,我经历过远古时代的GetAll(string name,int age),这种方式写服务的时候真的是心中一万个草泥马飞过,后面逐渐的变成了传一 ...

  2. Springboot项目引入druid安装部署使用

    一.maven引入依赖,数据库驱动根据项目需求自行引入 <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot ...

  3. 论文翻译:2021_Semi-Blind Source Separation for Nonlinear Acoustic Echo Cancellation

    论文地址:https://ieeexplore.ieee.org/abstract/document/9357975/ 基于半盲源分离的非线性回声消除 摘要: 当使用非线性自适应滤波器时,数值模型与实 ...

  4. spring cloud --- Zuul --- 心得

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 什么是 Zuul? Zuul是微服务网关,与Gateway类似 ,根据请 ...

  5. Python入门(上)

    Python入门(上) Python入门(上) 简介 Python 基础语法 行与缩进 注释 运算符 标准数据类型 变量 编程流程 顺序(略) 分支 if 循环 for while break 和 c ...

  6. test_6 python的列表去重

    1.使用内置函数set() set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. 2.创建一个空的列表进行比较,把不重复的元素添加到新的列表中 #co ...

  7. 有道翻译js加密参数分析

    平时在渗透测试过程中,遇到传输的数据被js加密的比较多,这里我以有道翻译为例,来分析一下它的加密参数 前言 这是有道翻译的界面,我们随便输入一个,抓包分析 我们发现返回了一段json的字符串,内容就是 ...

  8. #pragma pack() -----设置默认对齐数

    #pragma pack()  -----设置默认对齐数 预处理命令#pragma:程序如下 则根据修改的对齐数来算:则需要占据内存的大小是14 如果不进行设置,则按照编译器默认的对齐数来算:则需要占 ...

  9. 【reverse】逆向2 寄存器与内存

    [reverse]逆向2 寄存器与内存 1.通用寄存器 主要用途其实没必要记下来,因为只是CPU建议你这么做. 寄存器需要按照顺序被下来 32位就是可以存32个0或1 所以存储范围就是0-0xFFFF ...

  10. 【视频解码性能对比】opencv + cuvid + gpu vs. ffmpeg + cpu

    视频大小:1168856 字节画面尺寸:480*848帧数:275opencv + cuvid + tesla P4, 解码性能:1426.84 fps ffmpeg 4.0 API + [Intel ...