The Preliminary Contest for ICPC Asia Nanjing 2019(部分题解)

Holy Grail

计蒜客

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <iostream>
#define N 307
using namespace std;
typedef long long ll;
ll n,m,q,a,b;
ll mp[N][N],gra[N][N];
int main() {
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld%lld",&n,&m);
        for (int i = 0 ; i < n ; i++)
            for (int j = 0 ; j < n ; j++)
            {
                gra[i][j]=0x3f3f3f3f;
                if (i == j)
                    gra[i][j] = 0;
            }
        for(int i=0;i<m;i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            gra[u][v]=w;
        }
        for (ll i = 0 ; i < n ; i++)
            for (ll j = 0 ; j < n ; j++)
            {
                mp[i][j]=gra[i][j];
            }
        for (ll k = 1 ; k <= 6 ; k++)
        {
            for (ll k = 0 ; k < n ; k++)
                for (ll i = 0 ; i < n ; i++)
                    for (ll j = 0 ; j < n ; j++)
                        mp[i][j] = min(mp[i][k] + mp[k][j],mp[i][j]);
            scanf("%lld%lld",&a,&b);
            printf("%lld\n",-mp[b][a]);
            mp[a][b]=-mp[b][a];
        }
    }
    return 0;
}

Greedy sequence

计蒜客
题目实在令人头大,阅读理解很重要。。。
题意: n是字串a的长度,k是间隔最长长度。每个si序列以i开头,后面的数字以降序排列,且选中的相邻数字在a中的间隔<=k。最后的序列是s1,s2…sn的序列的字母个数。
解法: 用一个结构体,w为输入的值,id是在a字串中的下标(是从1开始),m值为满足 <=本身且距离<=k的字母个数,初始为1。自定义排序规则cmp后对数组排序。从前往后(从小到大)遍历,每一个字母与它前一个比较,若id之差<=k满足题意,i的m值加上i-1的,最后输出所有m值。

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=1e5+10;
struct node{
	int id;
	int w,m;
}a[maxn];

bool cmp(node a,node b){
	return a.w<b.w;
}

int main(){
	int T;
	cin>>T;
	while(T--){
		int n,k;
		cin>>n>>k;
		for(int i=1;i<=n;i++){
			cin>>a[i].w;
			a[i].id=i;
			a[i].m=1;
		}
		sort(a+1,a+1+n,cmp);	
		for(int i=2;i<=n;i++){
			for(int j=i-1;j>=1;j--){
				if(abs(a[i].id-a[j].id)<=k){
					a[i].m+=a[j].m;//!
					break;
				}
			}
		}
		for(int i=1;i<n;i++)
			cout<<a[i].m<<" ";
		cout<<a[n].m<<endl;	
	}
	return 0;
}
发布了54 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43629813/article/details/100369165