首页 > 其他分享 >2024.5.3【比赛】高一下三调

2024.5.3【比赛】高一下三调

时间:2024-05-03 15:45:54浏览次数:20  
标签:2024.5 int MAX freopen 比赛 br 三调 lld dis

为了拓宽自己的英雄池,还是要写一下。

分数 & 排名:

理想:

会牵挂的叫亲人,回不去的是故乡。

现实:

神虎一跃,威震天地!

A. 李时珍的皮肤衣

今天输了,明天也要卷土重来。

image

赛后加点卡赛时是不理解的。为啥这次就加点,上次数据范围错了都不把数据范围错的删了给我重测。

自己手动模拟一下小的数,易得答案为 \(2^{n-1}+1\pmod{n}\)。

由于 \(n\) 是 \(10^{10}\),所以快速幂过程中有概率炸 long long,因此开 __int128 即可。

梦想什么的,不重要了。那里还有等着俺的兄弟。
#include <bits/stdc++.h>
#define int __int128

using namespace std;

int n;

int ksm(int a,int b){
	int res = 1;
	while(b){
		if(b & 1) res = res * a % n;
		a = a * a % n;b >>= 1;
	}
	return res;
}

signed main(){
	freopen("lsz.in","r",stdin);
	freopen("lsz.out","w",stdout); 
	scanf("%lld",&n);
	printf("%lld",(ksm(2,n - 1) + 1) % n);
	return 0;
}

B. 马大嘴的废话

眼泪,不知不觉留下来。琴里燃烧着的,是长城的篝火。

暴力枚举每个字符串里面的子串,\(O(1)\) 查询。

打个赌,阴险的敌人,永远不敢来场堂堂正正的对决。
#include <bits/stdc++.h>

using namespace std;

int n,Q;string s;
unordered_map < string , int > sum,p;

void Input(){
	scanf("%d",&n);
	for(int i = 1;i <= n;i ++){
		cin >> s;p.clear();
		for(int j = 0;j < s.size();j ++){
			string t = "";
			for(int k = j;k < s.size();k ++){
				string o;o = s[k];t = t + o;
				if(!p[t]) sum[t] ++,p[t] = 1;
			}
		}
	}
}

void work(){
	scanf("%d",&Q);while(Q --){
		cin >> s;printf("%d\n",sum[s]);
	}
}

signed main(){
	freopen("mdz.in","r",stdin);
	freopen("mdz.out","w",stdout);
	Input();work();return 0;
}

C. SSY的队列

历史对我紧追不舍,但我速度更快。

不会。状压没学过,hash 没学过,改牛魔。

D. 清理牛棚

以无限为有限,以无法为有法。

看到洛谷题解的思路好巧。输入按照有向边建边,然后每个点向前一个点建一个边权为 \(0\) 的边,然后跑最短路就行了。

还有一个思路就是数据结构优化 \(DP\),由于有上面很显然简单的做法,所以没改。

我不怕练过一万种腿法的对手,只怕把一种腿法练一万次的对手。
#include <bits/stdc++.h>
#define N 100005
#define int long long

using namespace std;

int n,M,E,dis[N],vis[N];

struct Edge{int next,to,dis;}edge[N << 1];
int head[N],cnt;
void add(int from,int to,int dis){
	edge[++cnt] = (Edge){head[from],to,dis};
	head[from] = cnt;
}

struct Node{
	int pos,dis;
	bool operator <(const Node x) const{
		return x.dis < dis;
	}
};
priority_queue < Node > q;

int dij(){
	for(int i = M;i <= E + 1;i ++) dis[i] = 1e15;
	dis[M] = 0;q.push((Node){M,0});
	while(!q.empty()){
		Node tmp = q.top();q.pop();
		int x = tmp.pos;
		if(vis[x]) continue;
		for(int i = head[x];i;i = edge[i].next){
			int y = edge[i].to;
			if(dis[y] > dis[x] + edge[i].dis){
				dis[y] = dis[x] + edge[i].dis;
				if(!vis[y]) q.push((Node){y,dis[y]}); 
			}
		}
	}
	return dis[E + 1] == 1e15 ? -1 : dis[E + 1];
}

signed main(){
	freopen("clean.in","r",stdin);
	freopen("clean.out","w",stdout);
	scanf("%lld%lld%lld",&n,&M,&E);
	for(int i = 1,u,v,w;i <= n;i ++){
		scanf("%lld%lld%lld",&u,&v,&w);
		add(u,v + 1,w);
	}
	for(int i = M + 1;i <= E;i ++) add(i,i - 1,0);
	printf("%lld\n",dij());
	return 0;
}

E. 历史研究

点击查看代码

跟蒲公英类似的,包括预处理什么东西,怎么预处理也类似,就不说了,参考蒲公英就行。

当然也是回滚莫队板子,不会。

开战前没必要打赌,结果无非我赢你输。
#include <bits/stdc++.h>
#define N 100005
#define M 320
#define int long long

using namespace std;

struct T{int l,r;}t[M];
int n,m,Q,len,a[N],b[N],block[N],p[M][M],f[M][N],tmp[N];

void Input(){
	scanf("%lld%lld",&n,&Q);len = sqrt(n);int k = n / len;
	for(int i = 1;i <= k;i ++) t[i].l = (i - 1) * len + 1,t[i].r = i * len;t[k].r = n;
	for(int i = 1;i <= k;i ++) for(int j = t[i].l;j <= t[i].r;j ++) block[j] = i;
	
	for(int i = 1;i <= n;i ++) scanf("%lld",&a[i]),b[i] = a[i];
	sort(b + 1,b + n + 1);m = unique(b + 1,b + n + 1) - b - 1;
	for(int i = 1;i <= n;i ++) a[i] = lower_bound(b + 1,b + m + 1,a[i]) - b;
	
	for(int i = 1;i <= k;i ++){
		for(int j = t[i].l;j <= t[i].r;j ++) f[i][a[j]] += b[a[j]];
		for(int j = 1;j <= m;j ++) f[i][j] += f[i - 1][j];
	}
	
	for(int i = 1;i <= k;i ++){
		int MAX = 0;
		for(int j = 1;j <= k;j ++){
			for(int l = t[j].l;l <= t[j].r;l ++){
				if(f[j][a[l]] - f[i - 1][a[l]] >= f[j][MAX] - f[i - 1][MAX]) MAX = a[l];
			}
			p[i][j] = f[j][MAX] - f[i - 1][MAX];
		}
	}
}

void work(){
	int l,r;while(Q --){
		scanf("%lld%lld",&l,&r);
		int bl = block[l],br = block[r],MAX = 0;
		
		if(br - bl <= 1){
			for(int i = l;i <= r;i ++) tmp[a[i]] += b[a[i]],MAX = max(MAX,tmp[a[i]]);
			for(int i = l;i <= r;i ++) tmp[a[i]] = 0;printf("%lld\n",MAX);continue;
		}
		
		for(int i = l;i <= t[bl].r;i ++) tmp[a[i]] += b[a[i]];
		for(int i = t[br].l;i <= r;i ++) tmp[a[i]] += b[a[i]];
		for(int i = l;i <= t[bl].r;i ++) if(tmp[a[i]] + f[br - 1][a[i]] - f[bl][a[i]] >= tmp[MAX] + f[br - 1][MAX] - f[bl][MAX]) MAX = a[i];
		for(int i = t[br].l;i <= r;i ++) if(tmp[a[i]] + f[br - 1][a[i]] - f[bl][a[i]] >= tmp[MAX] + f[br - 1][MAX] - f[bl][MAX]) MAX = a[i];
		printf("%lld\n",max(tmp[MAX] + f[br - 1][MAX] - f[bl][MAX],p[bl + 1][br - 1]));
		for(int i = l;i <= t[bl].r;i ++) tmp[a[i]] = 0;
		for(int i = t[br].l;i <= r;i ++) tmp[a[i]] = 0;
	}
}

signed main(){
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	Input();work();return 0;
}

标签:2024.5,int,MAX,freopen,比赛,br,三调,lld,dis
From: https://www.cnblogs.com/Joy-Dream-Glory/p/18171249

相关文章

  • 2024.5.2考试总结
    今天又犯傻逼错误A简单背包,背包的大小开小了,100->10B数位DP,答案与输入并不在同一数量级,但我并不这么认为,所以我使用了高精度。说来我也是真的唐,只有加减的高精度调了30分钟以上C类似后效性处理,普通DP不行,用了一种很神秘的DP本来想的缩点转化成DAG做,但是统计方案数会有重复......
  • 20240502比赛总结
    [NOIP2017提高组]时间复杂度https://gxyzoj.com/d/hzoj/p/3673按题意模拟即可时间复杂度的计算方式是:常数->常数O(1)常数->nO(n)n->nO(1)就是细节很多,也不会算时间复杂度,挂成了40代码:#include<cstdio>#include<iostream>#include<string>#include<map>#......
  • 2024.5 做题记录
    362.CF553EKyoyaandTrain直接dp,设\(h_i\)为\(i\ton\)的最短路,\(f_{u,i}\)为到了点\(u\)用了\(i\)秒,还需要的最小期望花费。显然对于\(i>t\)有\(f_{u,i}=h_u+x\),否则有:\[f_{u,i}=\min\limits_{(u,v,d)\inE}\sum\limits_{j=1}^ip_jf_{v,i......
  • 2024.5.1测试总结
    今天考试考的不行A刚开始证明了只能是排序成单调递增的情况,后面知道了可以相等就好办了,逆序对数-相邻可交换对数B点分治,考场没写出来,后面调了很久,发现输入写错了C祖先/子树问题想到欧拉序,线段树区间推平即可,注意标记冲突时取深度更大的D看似是博弈论问题,其实是找性质和LCA......
  • 2024.5.1 听课纪录
    今天讲了不少有趣题,但是可惜很多题没有提交入口,不牛。先放个课件吧。度盘Codechef-CyclesAndColorings加强给出一张\(n\)个点\(m\)条边的无向连通简单图,你需要完成以下两个任务的其中一个,输出方案。给出一个三染色方案。找一个奇环,使得删去它后图仍连通。(注意:这里......
  • 三调“快乐”记
    三调了,嗯,浅说一下自己6科T了5科的经历吧数学:被向量背刺了,30分钟写了4.5道大题,当时只有将近半小时,我还没动大题。。。有一道向量,没写,最后半文,3分钟没想出来,所以只有4.5题,倒数第二题第二问本来用初中知识写出来了,却算错了,导致过程分也没了(但方法是对的,我还因为这个在数学课上小......
  • NFLS 240423 比赛总结
    FoxAndFencingTopcoderSRM598-Div1-Lv2题意在一个数轴上,Ciel的棋子在\(x=0\)处编号为\(1\),Liss的棋子在\(x=d\)处编号为\(2\),两个棋子的最大移动距离与攻击范围为\(mov,rng\(\leq10^9)\),任意一方进行一个操作后检查对方棋子是否在己方棋子攻击范围内,若是则己方获胜。......
  • NFLS 240422 比赛总结
    PieOrDolphinTopcoderSRM617-Div1-Lv2题意有\(n\(\leq50)\)个人,给他们发礼物,共有\(m\(\leq1000)\)天,每天要给两个人发礼物,其中一个人获得一号礼物,另一个获得二号礼物,定义一个方案的总和为每个人获得的一号二号礼物数之差的和。现在每一天要发礼物的两个人已经确定,但是你......
  • 2024年GPLT团体程序设计比赛L2-D吉利矩阵题解
    只能说比赛时前期做得太慢了,后面导致题目只能捞点分数(IOI赛制),当时这道题是我不剪枝DFS拿了4分,压线拿铜牌!考完试一做,发现是个大水题(bushi)主要原理:DFS(深度优先搜索)+剪枝名言:学搜索核心就是学剪枝废话不说了,见代码点击查看代码//原理:DFS+剪枝#include<bi......
  • “百度杯”CTF比赛 九月场-123
    “百度杯”CTF比赛九月场123题目类型:web题目描述:12341234,然后就解开了,打开靶机是一个会员登陆界面:解题方法:先查看一下网页源码:这里说用户信息都在user.php里面,然后我们访问一下user.php:发现并没有任何信息扫描一下它的目录文件看一下:扫出了一个user.php和view.php,但......