首页 > 其他分享 >【比赛】高一小学期2

【比赛】高一小学期2

时间:2024-07-08 12:31:16浏览次数:7  
标签:ch return 比赛 int 一小 学期 fa getchar define

纯唐比赛

T1 同类分布

一眼数位DP,没啥好嗦的

但是,题面出锅,本来数据范围给的是 \(2^{31}\) ,结果考完一看测试数据 \(1 1000000000000000000\),照搬洛谷就算了吧,时限还抄错(洛谷3000ms 考试时1000ms) 我真的***** 你猜我为啥T1 90分

#include<bits/stdc++.h>
using namespace std;
#define rd read()
#define int long long
int read(){
	int f=1,x=0;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
	for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
	return f*x;
} 
int l,r,f[20][200][200];
int len,a[20],mod;
int dfs(int pos,int sum,int num,int limit){
	if(pos==0) return sum==0?0:(sum==mod && num%mod==0);
	if(pos>len) return num==0 && sum==mod?1:0;
	if(!limit && f[pos][sum][num]!=-1) return f[pos][sum][num];

	int res=limit?a[len-pos+1]:9,ret=0;
	for(int i=0;i<=res && i+sum<=mod;i++)
		ret+=dfs(pos+1,sum+i,(10ll*num+i)%mod,i==res && limit);
		
	return limit?ret:f[pos][sum][num]=ret;
}
int part(int x){
	if(!x) return 0;
	len=0;
	while(x){
		a[++len]=x%10;
		x/=10;
	}
	int ret=0;
	for(mod=1;mod<=9*len;mod++){
		memset(f,-1,sizeof(f));
	    ret+=dfs(1,0,0,1);
	}
	return ret;
}
signed main(){
	#ifdef ONLINE_JUDGE
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	#endif
	
    l=rd,r=rd;
    printf("%lld\n",part(r)-part(l-1));
	return 0;
}

T2 千山鸟飞绝

讨厌数据结构,所以直接去打暴力了

赛时暴力打锅了,没调出来

还有个原因,他TM T2 的题输入文件还是a.in a.out(T1 也是a.in a.out),由于惯性思维我TM一直以为是b.in b.out,知道刚不久别人告诉我我TM才发现

赛后暴力 70pts

#include<bits/stdc++.h>
using namespace std;
#define rd read()
#define int long long
#define mkp make_pair
int read(){
	int f=1,x=0;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
	for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
	return f*x;
} 

const int N=300100;
struct Node{
    int x,y,z,u,v;
}bd[N];
struct Q{
    int v,x,y;
}q[N];
int n,T,cnt;
multiset<int>s1[N],s2[N];
int vis[N];
map< pair<int,int> ,int>mp;

void update(int x){
    multiset<int>::iterator it;
    it=s2[x].begin();
    int len=s1[x].size();
    if(len==1||len==0) return ;
    while(it!=s2[x].end()){
        s1[x].erase(bd[*it].z);
        bd[*it].u=max(bd[*it].u,len-1),bd[*it].v=max(bd[*it].v,(int)*(--s1[x].end()));
        s1[x].insert(bd[*it].z);
        it++;
    }
}

signed main(){
	#ifdef ONLINE_JUDGE
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	#endif
	
    n=rd;
    for(int i=1;i<=n;i++){
        bd[i].z=rd,bd[i].x=rd,bd[i].y=rd;
        int t=mp[mkp(bd[i].x,bd[i].y)];
        if(!t){
            t=++cnt;
            mp[mkp(bd[i].x,bd[i].y)]=t;
        }
        s1[t].insert(bd[i].z),s2[t].insert(i);
    }
    
    for(int i=1;i<=n;i++){
        int t=mp[mkp(bd[i].x,bd[i].y)];
        s1[t].erase(bd[i].z);
        if(s1[t].empty()){
            s1[t].insert(bd[i].z);
            continue;
        }
        bd[i].u=s1[t].size();
        bd[i].v=*--s1[t].end();
        s1[t].insert(bd[i].z);
    }
    
    T=rd;
    
	for(int i=1;i<=T;i++)
		q[i].v=rd,q[i].x=rd,q[i].y=rd;
	
    for(int i=1;i<=T;i++){
		int v=q[i].v,x=q[i].x,y=q[i].y;
        int t=mp[mkp(bd[v].x,bd[v].y)];
        if(vis[t]){
            update(t);
            vis[t]=0;
        }
        
        s1[t].erase(bd[v].z),s2[t].erase(v);
        
        if(s1[t].empty())
            mp[mkp(bd[v].x,bd[v].y)]=0;
            
        t=mp[mkp(x,y)];
        bd[v].x=x,bd[v].y=y;
        
		if(s1[t].empty())t=0;
        
		if(t){
            bd[v].u=max(bd[v].u,(int)s1[t].size());
            bd[v].v=max(bd[v].v,(int)*--s1[t].end());
        }else{
            t=++cnt;
            mp[mkp(x,y)]=t;
        }
        s1[t].insert(bd[v].z);
        s2[t].insert(v);
        vis[t]=1;
    }
    
    for(int i=1;i<=n;i++){
        update(mp[mkp(bd[i].x,bd[i].y)]);
        printf("%lld\n",1ll*bd[i].u*bd[i].v);
    }
    
    return 0;
}

/*
5
1 1 1
3 1 2
4 4 4
2 0 1
2 2 3
5
1 1 2
2 4 4
2 4 3
3 0 1
5 0 1

*/

multiset是真的好用

\(\LARGE STL真香\)

贺题解,平衡树Splay

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rd read()
#define inf 0x3f
#define INF 0x3f3f3f3f3f3f3f3f
#define mst(a,b) memset((a),(b),sizeof((a)))
#define mkp make_pair
#define Elaina 0
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
const int N=3e5+100;

int w[N],num,a[N];
int lz1[N],lz2[N],ans1[N],ans2[N];
int q[N];
map< pair<int,int> ,int> vis;

struct Slpay{
	int rt,tot,fa[N],ch[N][2],val[N],rot[N],sz[N];
	
	int get(int x) {return x==ch[fa[x]][1];}
	
	void clear(int x) {ch[x][1]=ch[x][0]=sz[x]=fa[x]=val[x]=lz1[x]=lz2[x]=0;}
	
	void pushup(int x){
		sz[x]=sz[ch[x][1]]+sz[ch[x][0]]+1;
		val[x]=max(max(val[ch[x][1]],val[ch[x][0]]),w[x]);
	}
	
	void rotate(int x){
		int y=fa[x],z=fa[y],type=get(x);
		ch[y][type]=ch[x][type^1];
		fa[ch[x][type^1]]=y;
		ch[x][type^1]=y;
		fa[y]=x,fa[x]=z;
		if(z) ch[z][y==ch[z][1]]=x;
		pushup(y),pushup(x);
	}
	
	void pushdown(int x){
		int k1=lz1[x],k2=lz2[x];
		for(int i=0;i<=1;i++){
			if(ch[x][i]){
				int j=ch[x][i];
				ans1[j]=max(ans1[j],k1);
	            ans2[j]=max(ans2[j],k2);
	            lz1[j]=max(lz1[j],k1);
	            lz2[j]=max(lz2[j],k2);
			}
		}
		lz1[x]=lz2[x]=0;
	}
	
	void splay(int x,int &rt){
		int top=0;
		
		for(int f=x;f;f=fa[f]) q[++top]=f;
		
	    while(top) pushdown(q[top--]);
	    
		for(int f;f=fa[x];rotate(x)) 
			if(fa[f])
				rotate(get(f)==get(x)?f:x);
		rt=x;
	}
	
	int find_pre(int p){
		int now=ch[rot[p]][0];
	    while(ch[now][1]) now=ch[now][1];
	    return now;
	}
	
	void del(int p,int x){
		splay(x,rot[p]);
	    int now=rot[p];
	    if(!ch[now][0]&&!ch[now][1]){
	        clear(now);
	        rot[p]=0;
	        return;
	    }
	    for(int i=0;i<=1;i++){
	    	if(!ch[now][i]){
		        rot[p]=ch[now][i^1];
		        fa[rot[p]]=0;
		        clear(now);
		        return;
	    	}
	    }
	    x=find_pre(p);
	    splay(x,rot[p]);
	    fa[ch[now][1]]=x;
	    ch[x][1]=ch[now][1];
	    clear(now);
	    pushup(rot[p]);
	}
	
	void insert(int &p,int x,int f){
	    if(!p){
	        p=x,fa[p]=f,val[p]=w[p],sz[p]=1;
	        return;
	    }
	    pushdown(p);
	    if(!ch[p][0]) insert(ch[p][0],x,p);
	    else insert(ch[p][1],x,p);
	}
}tr;

signed main(){
	#ifdef ONLINE_JUDGE
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	#endif
	
	int n=rd;
	for(int i=1;i<=n;i++){
		w[i]=rd;
		int x=rd,y=rd;
		if(!vis.count(mkp(x,y))) vis[mkp(x,y)]=++num;
        int k=vis[mkp(x,y)];
        a[i]=k;
        ans1[i]=max(ans1[i],tr.val[tr.rot[k]]);
        ans2[i]=max(ans2[i],tr.sz[tr.rot[k]]);
        tr.insert(tr.rot[k],i,0);
        tr.splay(i,tr.rot[k]);
        lz1[tr.rot[k]]=max(lz1[tr.rot[k]],w[i]);
        lz2[tr.rot[k]]=max(lz2[tr.rot[k]],tr.sz[tr.rot[k]]-1);
	}
	int t=read();
	while(t--){
		int i=rd,x=rd,y=rd;
		if(!vis.count(mkp(x,y))) vis[mkp(x,y)]=++num;
        int k=vis[mkp(x,y)],pre=a[i];
        a[i]=k;
        tr.del(pre,i);
        ans1[i]=max(ans1[i],tr.val[tr.rot[k]]);
        ans2[i]=max(ans2[i],tr.sz[tr.rot[k]]);
        tr.insert(tr.rot[k],i,0);
        tr.splay(i,tr.rot[k]);
        lz1[tr.rot[k]]=max(lz1[tr.rot[k]],w[i]);
        lz2[tr.rot[k]]=max(lz2[tr.rot[k]],tr.sz[tr.rot[k]]-1);
	}
	
	for(int i=1;i<=n;i++){
		tr.splay(i,tr.rot[a[i]]);
		printf("%lld\n",1ll*ans1[i]*ans2[i]);
	}
	return Elaina;
}

标签:ch,return,比赛,int,一小,学期,fa,getchar,define
From: https://www.cnblogs.com/Elaina-0/p/18289684

相关文章

  • 【比赛】高一小学期2
    挺唐的比赛,一道数位dp原题一道平衡树,然后T1数据范围还整错了。。没图了呜呜【比赛】高一小学期2$Rank$赛时日前赛后T1同类分布思路印象里为数不多搞懂了的数位dp,但过太久忘了,只能赛时打暴力后来发现跟正解很接近了,只是在dfs前的预处理上出了点问......
  • 高一小学期2
    A.同类分布本来看着挺像月之迷的(其实就是一模一样),但是鉴于我自己不是非常会打月之迷(其实应该自信点的,虽然当时是贺的题解但是大体思路还是会的),而且数据范围只有\(2^{31}\),所以就去分块打表了.赛时爆搜#include<bits/stdc++.h>usingnamespacestd;constintN=100000;//int......
  • 小学期第一周(7.1-7.7)
    7.1 周一为啥被人学校都放假了我们还有小学期【微笑]开玩笑其实我高兴得很,毕竟我是如此热爱学习今天小学期一人分了四道题我把每道题都看了看答案最后选了四道代码比较少的,这样验收的时候还简单点什么?问我为什么从网上找答案不自己写?那我也得会写才行啊,我的基础真的不敢恭......
  • 数据结构小学期第七天
    今天继续学习Springboot的项目实战今天了解了一下,如何在自己登陆后,还能让界面知道是谁在进行操作,这个功能的实现需要JWT令牌的作用我们需要先引入一个JWT依赖1<!--java-JWT坐标-->2<dependency>3<groupId>com.auth0</groupId>4<artifa......
  • 小学期第一次博客
    一、配置虚拟机环境首先,安装和配置虚拟机是整个项目的基础。选择适当的虚拟机管理软件(如VirtualBox或VMware)并安装Linux操作系统(如Ubuntu或CentOS)。配置好虚拟机后,需要确保虚拟机的网络设置为桥接模式,以便能够与外部网络通信。二、安装和配置Hadoop下载和安装Hadoop:从Hadoop的......
  • 20240706比赛总结
    题外话:IOI赛制的一大好处是可以猜解法,密码已改,不要试图jc我T1公式求值根据样例解释,显然在不进位的情况下,倒数第一位是所有位上数字的总和,倒数第二位是所有位上数字的总和减去最后一位的数字以此类推,显然前缀和,在处理一下进位即可代码:#include<cstdio>#include<string>#inc......
  • 比赛获奖的武林秘籍:03 好的创意选取-获得国奖的最必要前提
    比赛获奖的武林秘籍:03好的创意选取-获得国奖的最必要前提摘要本文主要介绍了大学生电子计算机类比赛和创新创业类比赛创意选取的重要性,并列举了好的创意选取和坏的创意选取的例子,同时说明了好的创意选取具有哪些特点,同时对常见的创意选取途径与来源进行了基本介绍。正文好的......
  • 比赛获奖的武林秘籍:03 好的创意选取-获得国奖的最必要前提
    比赛获奖的武林秘籍:03好的创意选取-获得国奖的最必要前提摘要本文主要介绍了大学生电子计算机类比赛和创新创业类比赛创意选取的重要性,并列举了好的创意选取和坏的创意选取的例子,同时说明了好的创意选取具有哪些特点,同时对常见的创意选取途径与来源进行了基本介绍。正文......
  • 数据结构小学期第六天
    今天完全实现了九宫格拼图游戏,具备一键通关功能按下W键,查看原图功能按住A键不松,移动图片按上下左右键,如果你自己想要实现这个功能,需要自己的图片,图片格式要求。每个小图片是105*105,完整图片是315*315.有人想要做一下,可以试一试。代码如下启动类1importcom.itheima.ui.GameJ......
  • 【2023-2024第二学期】助教工作学期总结——数字电路与逻辑设计助教
    一、助教工作的具体职责和任务协助教师引导大一转专业学生如何学习本门课程,收集学生问题、定期答疑、协助教师批改作业并跟踪作业完成情况,实验指导,改进课程建设。指导学生学习《数字电路与逻辑设计》。并指导学生完成《数字电路与逻辑设计实验》。二、助教工作的每周时长和具体......