zoukankan      html  css  js  c++  java
  • 模拟赛 ——“与” 小象涂色 行动!行动!

    屠龙宝刀点击就送

    T1 “与”

    挂分记录

    • 这题为什么看了半天才有思路啊

    • 文件名and->add(据统计,我机房OIer普遍打错此题文件,要么没打,要么ans,要么abs(

    • 最小是(1<<0),不是(1<<1)呀 —— 20pts爽吧

    AC现场

    #include<cstdio>
    #include<vector>
    #include<cstring>
    using namespace std;
    
    int n,ans,qvq,a[300005],able[300005];
    
    vector<int> buc[31];
    
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		scanf("%d",&a[i]);
    		for(int j=0;j<=30;j++)
    			if(a[i]&(1<<j))
    				buc[j].push_back(i);
    	}
    	for(int i=30;i>=0;i--){
    		int fuck=0;
    		for(int j=0;j<buc[i].size();j++){
    			if(able[buc[i][j]]!=qvq)continue;
    			fuck++;
    		}
    		if(fuck>=2){
    			ans+=(1<<i);
    			qvq++;
    			for(int j=0;j<buc[i].size();j++)able[buc[i][j]]++;
    		}
    	}
    	printf("%d
    ",ans);
    }
    

    T2 小象涂色

    其实

    算是这辈子第一次写期望题吧

    挂分记录

    不知道要用概率推,直接用上次染色的期望颜色转移的,还瞎推了柿子,蜜汁抱灵

    过了样例的抱灵代码

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using std::cout;
    using std::endl;
    
    int T,n,c,k,tot[105],add;
    
    double ans,fuck,f[105];
    
    int main(){
    	scanf("%d",&T);
    	while(T--){
    		memset(tot,0,sizeof(tot));
    		scanf("%d%d%d",&n,&c,&k);
    		ans=0;fuck=1.0/c;add=0;
    		for(int i=1;i<=c;i++)add+=i%c;
    		for(int i=1;i<=k;i++){
    			int l,r;
    		//	cout<<"qvq"<<i<<' '<<c<<' '<<add<<endl;
    			scanf("%d%d",&l,&r);
    			for(int j=l;j<=r;j++)tot[j]++;
    		}
    		for(int i=1;i<=n;i++){
    			memset(f,0,sizeof(f));
    			f[tot[i]]=1;
    			for(int j=tot[i]-1;j>=0;j--){
    				f[j]=0.5*f[j+1]+0.5*fuck*f[j+1]*add;
    			//	cout<<"emm"<<i<<' '<<j<<' '<<f[j]<<endl;
    			//	cout<<"a"<<fuck<<' '<<f[j+1]<<' '<<add<<endl;
    			}
    			ans+=f[0];
    		}
    		printf("%.9lf
    ",ans);
    	}
    }
    

    AC现场

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using std::cout;
    using std::endl;
    
    int T,n,c,k,tot[105],add;
    
    double ans,fuck,f[105][105];
    
    int main(){
    	scanf("%d",&T);
    	while(T--){
    		memset(tot,0,sizeof(tot));
    		memset(f,0,sizeof(f));
    		scanf("%d%d%d",&n,&c,&k);
    		f[0][1]=1;ans=0;fuck=1.0/c;
    		for(int i=1;i<=c;i++)add+=i%c;
    		for(int i=1;i<=k;i++){
    			int l,r;
    		//	cout<<"qvq"<<i<<' '<<c<<' '<<add<<endl;
    			scanf("%d%d",&l,&r);
    			for(int j=l;j<=r;j++)tot[j]++;
    		}
    		for(int i=1;i<=k;i++){
    			for(int j=0;j<c;j++){
    				f[i][j]+=0.5*f[i-1][j];
    				for(int k=0;k<c;k++)
    					f[i][j*k%c]+=0.5*fuck*f[i-1][j];
    			}
    		}
    		for(int i=1;i<=n;i++){
    			for(int j=0;j<c;j++)
    				ans+=j*f[tot[i]][j];
    		}
    		printf("%.9lf
    ",ans);
    	}
    }
    

    T3 行动!行动!

    吐槽

    • 尼玛的,卡spfa?

    • 正解是spfa优化?不存在的!Dijkstra盘他

    • 飞行路线原题?连样例都一样?

    • 尼玛的?laoj评测姬有毒?

    long long ans=21474836477777777——CE(@Pride205 +1

    long long ans=21474836477777777ll——AC

    你ll尼玛呢?

    收获

    这辈子第一次会写飞行路线的二维dijkstra写法

    Spfa现场

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<iostream>
    #define int long long
    using namespace std;
    
    int n,m,k,s,t,ans=21474836477777777,cnt,head[10005];
    
    int dis[10005][15],vis[10005][15];
    
    struct edge{
    	int v,w,next;
    }e[100005];
    
    inline void add(int u,int v,int w){
    	e[++cnt].v=v;
    	e[cnt].w=w;
    	e[cnt].next=head[u];
    	head[u]=cnt;
    }
    
    struct node{
    	int u,t;
    };
    
    inline void spfa(){
    	queue<node> q;
    	dis[s][0]=0;
    	q.push((node){s,0});
    	while(!q.empty()){
    		node u=q.front();
    		q.pop();
    		vis[u.u][u.t]=0;
    		for(int i=head[u.u];i!=-1;i=e[i].next){
    			int v=e[i].v;
    			if(dis[v][u.t]>dis[u.u][u.t]+e[i].w){
    				dis[v][u.t]=dis[u.u][u.t]+e[i].w;
    				q.push((node){v,u.t});
    			}
    			if(u.t==k)continue;
    			if(dis[v][u.t+1]>dis[u.u][u.t]){
    				dis[v][u.t+1]=dis[u.u][u.t];
    				q.push((node){v,u.t+1});
    			}
    		}
    	}
    }
    
    signed main(){
    	memset(head,-1,sizeof(head));
    	memset(dis,0x3f,sizeof(dis));
    	scanf("%I64d%I64d%I64d%I64d%I64d",&n,&m,&k,&s,&t);
    	for(int i=1;i<=m;i++){
    		int a,b,c;
    		scanf("%I64d%I64d%I64d",&a,&b,&c);
    		add(a,b,c);
    		add(b,a,c);
    	}
    	spfa();
    	for(int i=0;i<=k;i++)
    		ans=min(ans,dis[t][i]);
    	printf("%I64d
    ",ans);
    }
    

    AC现场

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<iostream>
    #define int long long
    using namespace std;
    
    int n,m,k,s,t,ans=21474836477777777ll,cnt,head[10005];
    
    int dis[10005][15],vis[10005][15];
    
    struct edge{
    	int v,w,next;
    }e[100005];
    
    inline void add(int u,int v,int w){
    	e[++cnt].v=v;
    	e[cnt].w=w;
    	e[cnt].next=head[u];
    	head[u]=cnt;
    }
    
    struct node{
    	int u,t,dis;
    	bool operator<(const node &x)const{return x.dis<dis;}		
    };
    
    inline void dijkstra(){
    	priority_queue<node> q;
    	dis[s][0]=0;
    	q.push((node){s,0,0});
    	while(!q.empty()){
    		node u=q.top();
    		q.pop();
    		if(vis[u.u][u.t])continue;
    		vis[u.u][u.t]=1;
    		for(int i=head[u.u];i!=-1;i=e[i].next){
    			int v=e[i].v;
    			if(dis[v][u.t]>dis[u.u][u.t]+e[i].w){
    				dis[v][u.t]=dis[u.u][u.t]+e[i].w;
    				q.push((node){v,u.t,dis[v][u.t]});
    			}
    			if(u.t==k)continue;
    			if(dis[v][u.t+1]>dis[u.u][u.t]){
    				dis[v][u.t+1]=dis[u.u][u.t];
    				q.push((node){v,u.t+1,dis[v][u.t+1]});
    			}	
    		}		
    	}		
    }
    
    signed main(){
    	memset(head,-1,sizeof(head));
    	memset(dis,0x3f,sizeof(dis));
    	scanf("%I64d%I64d%I64d%I64d%I64d",&n,&m,&k,&s,&t);
    	for(int i=1;i<=m;i++){
    		int a,b,c;
    		scanf("%I64d%I64d%I64d",&a,&b,&c);
    		add(a,b,c);
    		add(b,a,c);
    	}
    	dijkstra();
    	for(int i=0;i<=k;i++)
    		ans=min(ans,dis[t][i]);
    	printf("%I64d
    ",ans);
    }
    
  • 相关阅读:
    理解WebKit和Chromium: Web应用和Web运行环境
    理解WebKit和Chromium: 网页渲染的基本过程
    【闲谈】我的大学
    使用GDAL将下载的Google卫星图像转为带坐标的tif
    Linux下使用GDAL进行开发(automake使用)
    Linux下编译GDAL
    【Unity技巧】统一管理回调函数——观察者模式
    【Unity技巧】使用单例模式Singleton
    【Unity插件】LitJson杂谈
    理解WebKit和Chromium:Chromium资源磁盘缓存
  • 原文地址:https://www.cnblogs.com/Y15BeTa/p/11853026.html
Copyright © 2011-2022 走看看