首页 > 其他分享 >Living-Dream 系列笔记 第25期

Living-Dream 系列笔记 第25期

时间:2024-03-03 18:46:56浏览次数:29  
标签:node Living cout val 25 int long 1031 Dream

Problem

T1

/*
思路:
对于操作1,直接+=拼接即可;
对于操作2,直接令s=s.substr(a,b)即可;
对于操作3,直接令s=s.insert(a,t)即可;
对于操作4,直接s.find(str)即可,注意特判-1。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int q;
string s; 

signed main(){
	ios::sync_with_stdio(0);
	cin>>q>>s;
	while(q--){
		int op,a,b; string t;
		cin>>op;
		if(op==1){
			cin>>t;
			s+=t;
			cout<<s<<'\n';
		}
		else if(op==2){
			cin>>a>>b;
			s=s.substr(a,b);
			cout<<s<<'\n';
		}
		else if(op==3){
			cin>>a>>t;
			s.insert(a,t);
			cout<<s<<'\n';
		}
		else{
			cin>>t;
			if(s.find(t)!=string::npos) cout<<s.find(t)<<'\n';
			else cout<<"-1\n";
		}
	}
	return 0;
}

T2

/*
思路:
考虑贪心,
因为越晚结束的比赛应该越早打完,
这样留出来的时间就越多,
所以需要对比赛按结束时间从小到大排序。
然后依次遍历每个比赛,能打则打,最后输出能打的比赛数即可。
这便是著名的线段覆盖问题。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,last=-1,ans;
struct node{
	int l,r;
}a[1000031];
bool cmp(node x,node y){
	return x.r<y.r;
}

signed main(){
	ios::sync_with_stdio(0);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i].l>>a[i].r;
	a[0].l=a[0].r=0;
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
		if(a[i].l>=last) 
			ans++,last=a[i].r;
	cout<<ans;
	return 0;
}

T3

/*
思路:按照题意模拟排序过程即可。
坑点:
1.题面加粗的排序规则不是按Ei排序,而是按每个人的权值排序。
2.注意序号与编号的差别。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,k;
int e[31];
struct node{
	int val,id,d;
}p[20031];

bool cmp(node x,node y){ 
    if(x.val==y.val) return x.id<y.id;
	return x.val>y.val; 
}

signed main(){
	ios::sync_with_stdio(0);
	cin>>n>>k;
	for(int i=1;i<=10;i++) cin>>e[i];
	for(int i=1;i<=n;i++) 
		cin>>p[i].val,p[i].id=i;
	sort(p+1,p+n+1,cmp);
	for(int i=1;i<=n;i++) 
	    p[i].d=i,p[i].val+=e[(p[i].d-1)%10+1];
	sort(p+1,p+n+1,cmp);
	for(int i=1;i<=k;i++) cout<<p[i].id<<' ';
	return 0;
}

T4

/*
思路:
考虑dfs求连通块,
首先连通块的最大大小很好求,
求周长其实就是对于每个连通块中的点,
扫描一遍它四个方向的所有点,
因为每个点只有它四周有不为'#'的点时才会贡献周长,
所以统计它四个方向上不为'#'的点的个数即可。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n;
int are,cir,Are=-1e9,Cir=1e9,tmp;
bool vis[1031][1031];
bool vis2[1031][1031];
int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; 
char mp[1031][1031];

void dfs(int x,int y){
	if(vis[x][y]) return;
	vis[x][y]=1,are++;
	for(int i=0;i<4;i++){
		int xx=x+dx[i],yy=y+dy[i];
		if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&mp[xx][yy]=='#'&&!vis[xx][yy]) dfs(xx,yy);
	} 
	for(int i=0;i<4;i++){
		int xx=x+dx[i],yy=y+dy[i];
		if((mp[xx][yy]!='#'||xx<1&&xx>n&&yy<1&&yy>n)) 
			cir++,vis2[xx][yy]=tmp;
	}
}

signed main(){
	ios::sync_with_stdio(0);
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>mp[i][j];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			if(!vis[i][j]&&mp[i][j]=='#'){
				are=cir=0,tmp++;
				dfs(i,j);
				if(Are<are) Are=are,Cir=cir;
				if(Are==are&&cir<Cir) Are=are,Cir=cir;
				//cout<<cir<<'\n';
				//memset(vis2,0,sizeof(vis2));
			}
		}
	cout<<Are<<' '<<Cir;
	return 0;
}

标签:node,Living,cout,val,25,int,long,1031,Dream
From: https://www.cnblogs.com/XOF-0-0/p/18050455

相关文章

  • Living-Dream 系列笔记 第23期
    ProblemT1/*思路:我们可以忽略两人碰到后转向的过程,直接视为两人彼此穿过了对方,这样算距离是不变的,时间也是不变的,所以合法。通过上述分析,那么最小时间即为对于每一个士兵往左/右走的时间取min再取max,最大时间反之亦然。*/#include<bits/stdc++.h>usingnamespacestd;......
  • Living-Dream 系列笔记 第24期
    ProblemT1/*思路:暴力枚举所有的和,用桶标记每个和出现的次数,找最大值且编号最小即可。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;ints1,s2,s3;intsum=-1e9,ans;intmp[131];signedmain(){ ios::sync_with_stdio(0); cin>>s1>>s2>>s3;......
  • Living-Dream 系列笔记 第21期
    ProblemT1/*思路:枚举二元组(i,j),依次检验k次训练课,若i的位置总是>j或<j,则将答案累加。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intk,n,ans;inta[31][31];signedmain(){ ios::sync_with_stdio(0); cin>>k>>n; for(inti=1;i<=......
  • Living-Dream 系列笔记 第22期
    ProblemT1/*思路:因为题目要求最大水量,所以K次操作需要都用上,并且由于每次都是将x倒入x+1中,所以K次操作之后的最大水量应当是x~x+k+1之和;于是问题就转变成了求一段长度为k+1的连续子段的和的最大值,因此维护一个前缀和即可。*/#include<bits/stdc++.h>usingnamespacestd......
  • Living-Dream 系列笔记 第19期
    ProblemT1/*思路:对于每一对L,R,标记[L,R)(注意左闭右开!),并且求出最小的L(minl)和最大的R-1(maxr);循环maxl~maxr,若被标记则最长连续挤奶时间+1,最长无人挤奶时间=0;否则最长连续挤奶时间=0,最长无人挤奶时间+1,同时更新最大值。*/#include<bits/stdc++.h>usingnamespacestd;intn......
  • Living-Dream 系列笔记 第18期
    ProblemT1/*思路:令N个整数以字符串形式读入,判断其末尾是否为0、2、4、6、8,若是则为偶数,不是则为奇数。*/#include<bits/stdc++.h>usingnamespacestd;intn;stringx;//以字符串形式读入intmain(){ cin>>n; while(n--){ cin>>x; if(x[x.size()-1]=='0'||x[x.......
  • Living-Dream 系列笔记 第20期
    ProblemT1/*思路:统计每个人成绩的出现人次,然后贪心地按分数值域从大到小扫描一遍,每次令答案累加上当前分数出现的人次,若答案>=k就停止扫描并输出即可。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,k,a[2031];intcnt,ans;intmp[131......
  • P2532 [AHOI2012] 树屋阶梯 题解
    P2532[AHOI2012]树屋阶梯题解容易发现答案是卡特兰数,那么考虑证明这一点。考虑从左下角到右上角填满格子。利用动态规划的思想,回忆一下某道\(IOI\)的题目[数字三角形],每个格子的方案都只能由其左边或下边转移而来。可以结合图理解一下。好,刚才这个定义显然很符合卡特兰......
  • AVX256指令集
    所有函数16位/32位/8位有符号整数向量的绝对值__m256i_mm256_abs_epi16(__m256ia)__m256i_mm256_abs_epi32(__m256ia)__m256i_mm256_abs_epi8(__m256ia)分别获取16个16位/8个32位/32个8位有符号整数向量的取绝对值的结果。16位/32位/64位/8位有符号整数向量的......
  • Living-Dream 系列笔记 第34期
    T1有一个比较秒的trick:虚拟点。对于本题,我们设一虚拟点\(n+1\)表示水源,于是打井的操作即为与点\(n+1\)连边,将点权转为边权。然后跑kruskal即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,tot;intfa[331];intw[331];intp[331]......