• 20180806 考试记录


    T1 【NOIP2013模拟联考8】最短路(path)

    Solution

    设s为第0个标记点,t为k+1个跑k+1次最短路
    然后全排列暴力求解qwq
    注意最大值要设为long long范围最大值

    Code

    PS:各种修改qwq

    //By Menteur_Hxy
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define int long long
    #define F(i,a,b) for(register int i=(a);i<=(b);i++)
    #define E(i,u) for(register int i=head[u];i;i=nxt[i])
    using namespace std;
    typedef pair<int,int> PII;
    
    int read() {
    	int x=0,f=1; char c=getchar();
    	while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
    	while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
    	return x*f;
    }
    
    const int N=50010,M=100010;
    int cnt;
    int head[N],to[M],w[M],nxt[M],poi[20],dis[20][N],vis[N];
    
    priority_queue<PII,vector<PII>,greater<PII> > Q;
    void dij(int s) {
    	Q.push(PII(dis[s][poi[s]]=0,poi[s]));
    	memset(vis,0,sizeof vis);
    	while(!Q.empty()) {
    		int u=Q.top().second; Q.pop();
    		if(vis[u]) continue;
    		E(i,u) {
    			int v=to[i];
    			if(dis[s][v]>dis[s][u]+w[i]) Q.push(PII(dis[s][v]=dis[s][u]+w[i],v));
    		}
    		vis[u]=1;
    	}
    }
    
    int ans=3000000000ll;
    bool fla[20];
    void dfs(int num,int sum,int fr,int k) {
    	if(sum>ans) return ;
    	if(num==k) {ans=min(ans,sum+dis[fr][poi[k]]);return ;}
    	F(i,1,k-1) if(!fla[i]) fla[i]=1,dfs(num+1,sum+dis[fr][poi[i]],i,k),fla[i]=0;
    }
    
    #define add(a,b,c) nxt[++cnt]=head[a],to[cnt]=b,w[cnt]=c,head[a]=cnt
    signed main() {
    //	freopen("path10.in","r",stdin);
    	int n=read(),m=read(),k=read(),s=read(),t=read(),x,y,z;
    	F(i,1,m) {
    		x=read(),y=read(),z=read();
    		add(x,y,z);
    	}
    	poi[0]=s;
    	F(i,1,k) poi[i]=read();
    	poi[++k]=t;
    	F(i,0,k-1) F(j,1,n) dis[i][j]=3000000000ll;
    	F(i,0,k-1) dij(i);
    //	F(i,0,k) F(j,0,k) printf("dis[%d][%d]=%d
    ",i,poi[j],dis[i][poi[j]]);
    	dfs(1,0,0,k);
    	if(ans==3000000000ll) printf("-1");
    	else printf("%lld",ans);
    	return 0;
    }
    

    T2 【NOIP2013模拟联考11】剑与魔法(dragons)

    Solution

    贪心,保留范围内最大的值,最后注意把剩下的都加上

    Code

    //By Menteur_Hxy
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define F(i,a,b) for(register int i=(a);i<=(b);i++)
    #define R(i,a,b) for(register int i=(b);i>=(a);i--)
    #define E(i,u) for(register int i=head[u];i;i=nxt[i])
    using namespace std;
    typedef pair<int,int> PII;
    
    int read() {
    	int x=0,f=1; char c=getchar();
    	while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
    	while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
    	return x*f;
    }
    
    const int N=200010;
    char p[N];
    int da[N],ans;
    
    priority_queue<int,vector<int>,greater<int> > Q;
    int main() {
    	int n=read();
    	F(i,1,n) scanf("
    "),p[i]=getchar(),da[i]=read();
    //	F(i,1,n) cout<<p[i]<<" ";
    	int tot=0;
    	F(i,1,n) if(p[i]!='e') tot++;
    	if(tot<da[n]) {
    		printf("-1");
    		return 0;
    	}
    	F(i,1,n-1) {
    		if(p[i]=='c') Q.push(da[i]);
    		else {
    			while(Q.size()>da[i]-1) {
    				if(Q.empty()) {
    					printf("-1");
    					return 0;
    				}
    				Q.pop();
    			}
    		}
    	}
    	while(!Q.empty()) ans+=Q.top(),Q.pop();
    	printf("%d",ans);
    	return 0;
    }
    

    T3 【NOIP2013模拟联考13】三角形(triangle)

    Solution

    枚举一个点,算出另外n-1个点关于它的斜率并统计答案

    Code

    //By Menteur_Hxy
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define int long long
    #define F(i,a,b) for(register int i=(a);i<=(b);i++)
    #define R(i,a,b) for(register int i=(b);i>=(a);i--)
    #define E(i,u) for(register int i=head[u];i;i=nxt[i])
    using namespace std;
    typedef pair<int,int> PII;
    
    int read() {
    	int x=0,f=1; char c=getchar();
    	while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
    	while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
    	return x*f;
    }
    
    const int N=3010;
    int xi[N],yi[N];
    double k[N];
    
    signed main() {
    	freopen("triangle.in","r",stdin);
    	freopen("triangle.out","w",stdout);
    	int n=read(),ans=n*(n-1)*(n-2)/6;
    	F(i,1,n) xi[i]=read(),yi[i]=read();
    	F(i,1,n) {
    		int tot=0,reg=1;
    		F(j,i+1,n) if(yi[i]!=yi[j]&&xi[i]!=xi[j]) k[++tot]=(double)(yi[j]-yi[i])/(xi[j]-xi[i]);
    		sort(k+1,k+1+tot);
    //		F(j,1,tot) cout<<k[j]<<" ";cout<<endl;
    		F(j,2,tot) {
    			if(k[j-1]==k[j]) reg++;
    			if(k[j-1]!=k[j]||j==tot) ans-=reg*(reg-1)/2,reg=1;
    		}
    		reg=0;
    		F(j,i+1,n) if(i!=j&&xi[i]==xi[j]) reg++;
    		ans-=reg*(reg-1)/2;reg=0;
    		F(j,i+1,n) if(i!=j&&yi[i]==yi[j]) reg++;
    		ans-=reg*(reg-1)/2;reg=0;
    	}
    	printf("%lld",ans);
    	return 0;
    }
    
    版权声明:本文为博主原创文章,未经博主允许不得转载。 博主:https://www.cnblogs.com/Menteur-Hxy/
  • 相关阅读:
    字符串逆序输出
    格式化输出
    redis的使用
    redis介绍
    虚拟机间的网络配置+远程访问数据库
    django之contenttype组件
    http请求
    cookie和session
    Django视图解决csrftoken认证
    Django视图解析
  • 原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9433762.html
Copyright © 2020-2023  润新知