2021-10-05模拟赛

Posted ZJHsnowwolf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-10-05模拟赛相关的知识,希望对你有一定的参考价值。


1、寻找道路

链接: 洛谷P2296
算法思路:SPFA找最短路,双向BFS。

#include<bits/stdc++.h>
using namespace std;
const int maxv=100001;
const int INF=1e9; 
vector<int> g[maxv];
vector<int> fg[maxv];
int d[maxv],n,m;
bool v[maxv],can[maxv];
void SPFA(int s,int t){
	fill(d,d+maxv,INF);
	fill(v,v+maxv,0);
	fill(can,can+maxv,0);
	queue<int> q1;
	queue<int> q2;
	q1.push(s);
	q2.push(t);
	can[t]=true;
	d[s]=0;
	while(!q2.empty()){
		int u=q2.front();
		q2.pop();
		if(!can[u]){
			can[u]=true;
			int a=g[u].size();
			for(int i=0;i<a;i++){
				if(!can[g[u][i]])	can[u]=false;
			}
		}
		if(can[u]&&!v[u]){
			v[u]=true;
			int a=fg[u].size();
			for(int i=0;i<a;i++){
				q2.push(fg[u][i]);
			}
		}
	}
	fill(v,v+maxv,0);
	v[s]=true;
	while(!q1.empty()){
		int u=q1.front();
		q1.pop();
		v[u]=false;
		int a=g[u].size();
		for(int j=0;j<a;j++){
			int w=g[u][j];
			if(d[u]+1<d[w]&&can[w]){
				d[w]=d[u]+1;
				if(!v[w]){
					q1.push(w);
					v[w]=true;
				}
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int a,b;
		scanf("%d%d",&a,&b);
		g[a].push_back(b);
		fg[b].push_back(a);
	}
	int s,t;
	scanf("%d%d",&s,&t);
	SPFA(s,t);
	if(d[t]==INF)	printf("-1\\n");
	else	printf("%d\\n",d[t]); 
	return 0; 
}

你这代码它保过吗
估分:60分
实际:10分
不保过
感想:总有无知的蒟蒻,敢于迷失在自己的BFS中。
有些代码,写着写着就成玄学了
订正代码
最后再说一遍
最短路要优化了
[Made in BFS]

#include<bits/stdc++.h>
using namespace std;
bool inroad[10010],can[10010];
int dis[10010]; 
vector<int>side[10010];
vector<int>edis[10010];
int main()
{
    int n,m,a,b,s,t;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b;
        side[a].push_back(b);
        edis[b].push_back(a);
    }
    cin>>s>>t;
    can[t]=1;
    queue<int>que; 
    que.push(t);
    while(!que.empty()){
        int now=que.front();
        que.pop();
        for(int i=edis[now].size()-1;i>=0;i--)
        {
            int to=edis[now][i];
            if(!can[to])
            {
                que.push(to);   
                can[to]=1;
            }
        }
    }
    if(!can[s]){
        cout<<"-1";
        return 0;
    }
    for(int i=1;i<=n;i++){
        if(can[i])
        {
            inroad[i]=1;
            for(int j=side[i].size()-1;j>=0;j--){
                int to=side[i][j];
                if(!can[to]){
                    inroad[i]=0;
                    break;
                }
            }
        }
    }
    if(!inroad[s]){
    	cout<<"-1";
    	return 0;
        }
    dis[s]=1;que.push(s);
    while(!que.empty()){
        int now=que.front();
        que.pop();
        if(now==t){
            cout<<dis[t]-1;
            return 0;
        }
        for(int i=side[now].size()-1;i>=0;i--){
            int to=side[now][i];
            if(inroad[to]&&!dis[to])
            {
                dis[to]=dis[now]+1;
                que.push(to);
            }
        }
    }
    cout<<"-1";
    return 0;
}

2、 国王游戏

链接:洛谷P1080
算法:贪心排序
可能要用的:高精度
(这辈子都不可能用高精的,只能靠着longlong混混日子。不是)
代码

#include<bits/stdc++.h>
using namespace std;
struct node{
	long long int l,r,x;
}g[1005];
bool cmp(node a,node b){
	return a.x<b.x;
}
int main(){
	long long int ans=0,sum,n,a,b;
	scanf("%lld%lld%lld",&n,&a,&b);
	for(int i=1;i<=n;i++){
		scanf("%lld%lld",&g[i].l,&g[i].r);
		g[i].x=g[i].l*g[i].r;
	}
	sort(g+1,g+n+1,cmp);
	sum=a;
	for(int i=1;i<=n;i++){
		ans=max(ans,sum/g[i].l);
		sum*=g[i].r;
	}
	printf("%lld",ans);
	return 0;
}

估分:60分
实际:零分。。。
复查,我左右手反了。。。
再测60分。
感想:phthon yygjds

#include<bits/stdc++.h>
using namespace std;
const int MAX_SIZE = 10100;
struct node{
	int l,r;
	long long int x;
}g[1005];
bool cmp(node a,node b) {
    return a.x<b.x;
}
struct Int {
	int len, n[MAX_SIZE];
	void Set(int l) {
		len = l;
		for(int i = 1; i <= len; i ++) n[i] = 0;
	}
	Int(long long x = 0) {
		len = 0;
		do {
			n[++ len] = x % 10;
			x /= 10;
		} while(x);
	}
	bool operator < (const Int b) {
		if(len != b.len) return len < b.len;
		for(int i = len; i; i --)
			if(n[i] != b.n[i]) return n[i] < b.n[i];
		return false;
	}
	Int operator * (Int b) {
		Int ans; ans.Set(len + b.len);
		for(int i = 1; i <= len; i ++) {
			for(int j = 1; j <= b.len; j ++) {
				ans.n[i + j - 1] += n[i] * b.n[j];
				ans.n[i + j] += ans.n[i + j - 1] / 10;
				ans.n[i + j - 1] %= 10;
			}
		}
		while(!ans.n[ans.len] && ans.len > 1) ans.len --;
		return ans;
	}
	Int operator / (const int &b) { //除以低精  
     	    if(*this < Int(b)) return Int(0LL);  
     	    Int ans; ans.len = len;  
     	    int r = 0;  
     	    for(int i = ans.len; i; i --) {  
     		r = r * 10 + n[i];  
     		ans.n[i] = r / b;  
          	r %= b;  
        }  
            while(ans.len > 1 && !ans.n[ans.len]) ans.len --;  
            return ans;  
        }
	void print() {
		for(int i = len; i; i --) 
			printf("%d", n[i]);
		printf("\\n");
	}
};
int main(){
	int n,a,b;
	scanf("%d%d%d",&n,&a,&b);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&g[i].l,&g[i].r);
		g[i].x=g[i].l*g[i].r;
	}
	sort(g+1,g+n+1,cmp);
	Int sum(a);
	Int aws(1);
	for(int i=1;i<=n;i++){
		if(aws<(sum/g[i].r))	aws=(sum/g[i].r);
		sum=sum*g[i].l;
	}
	aws.print();
	return 0;
}

3、书柜的尺寸

链接:洛谷P2160
算法:排序
可能的解法:动规
没写的出来(紫题好耶)
跳转隔壁题解 懒.jpg
订正代码

#include <bits/stdc++.h>
using namespace std;
#define maxn 2105
#define INF 0x3f
struct Node{
    int h,t;
}a[80];
bool cmp(Node a,Node b){return a.h>b.h;}
int f[2][maxn][maxn],n,sum[80];
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)scanf("%d%d",&a[i].h,&a[i].t);
    sort(a+1,a+1+n,cmp);
    sum[12021-10-05模拟赛

iOS Swift 中的 Android 片段模拟

php 在终端中模拟一点加载字符的片段

当我想模拟数据并测试 UI 片段时,doNothing() 不起作用

2021-10-05

google-map 片段应用程序在模拟器中崩溃后打开 WebView 活动