• Codeforces Round #699 Div. 2


    摸起来了,摸鱼,永远滴神

    A. Space Navigation

    给定一个坐标和一串移动命令,可以删掉任意多个移动命令,问火箭能不能从(0,0)移动到给定坐标

    只要统计每种命令的个数,火箭可以到达其固定的矩形范围内任意一点,判断即可。

    #include <iostream>
    #include <cstring>
    #include <stdio.h>
    #include <algorithm>
    #include <set>
    #include<vector>
    #include<cmath>
    #include <map>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int, int> P;
    ll n, t;
    ll x,y;
    string s;
    ll dat[4];
    int main() {
    	ios::sync_with_stdio(0);
    	cin >> t;
    	while (t--)
    	{
    		cin >> x >> y;
    		cin >> s;
    		memset(dat, 0, sizeof(dat));
    		for (int i = 0; i < s.size(); i++) {
    			if (s[i] == 'L')dat[0]++;
    			if (s[i] == 'R')dat[1]++;
    			if (s[i] == 'U')dat[2]++;
    			if (s[i] == 'D')dat[3]++;
    		}
    		int flag1 = 0, flag2 = 0;
    		if (x >= 0 && dat[1] >= x)flag1 = 1;
    		if (x < 0 && dat[0]>=abs(x))flag1 = 1;
    		if (y >= 0 && dat[2] >= y)flag2 = 1;
    		if (y < 0 && dat[3] >= abs(y))flag2 = 1;
    		if (flag1 && flag2)cout << "YES
    ";
    		else  cout << "NO
    ";
    	}
    }
    
    

    B. New Colony

    模拟

    模拟

    #include <iostream>
    #include <cstring>
    #include <stdio.h>
    #include <algorithm>
    #include <set>
    #include<vector>
    #include<cmath>
    #include <map>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int, int> P;
    ll t;
    ll n,k;
    string s;
    ll dat[1000];
    int mv() {
    	int cur = 0;
    	while (1)
    	{
    		if (cur == n - 1)return -1;
    		if (dat[cur] >= dat[cur + 1])cur++;
    		else {
    			dat[cur]++;
    			return cur+1;
    		}
    	}
    	
    }
    int main() {
    	ios::sync_with_stdio(0);
    	cin >> t;
    	while (t--)
    	{
    		cin >> n >> k;
    		for (int i = 0; i < n; i++)
    			cin >> dat[i];
    		int ans = 0;
    		for (int i = 0; i < k; i++) {
    			ans = mv();
    			if (ans == -1)break;
    		}
    		cout << ans << '
    ';
    	}
    }
    
    

    C. Fence Painting

    一开始有个点没想到,改完了之后还是错的,比赛的时候就没写出来,结果是数组少打了个零???

    要将一串栅栏漆上一定的颜色,给定栅栏一开始的颜色,再给定栅栏要漆上的颜色(都是一串数组),已经请来了一些艺术家,他们按顺序到来,可以给任意一个栅栏画上给定的颜色,但是不能跳过,问能不能成功给栅栏全部上色,如果能,还要输出每个艺术家上色的栅栏编号

    1.用个vector数组存需要改变颜色的栅栏编号,vector下标是要漆上的颜色

    2.统计每种颜色的艺术家个数以及需要改变上色的颜色个数,如果艺术家个数不够则不能成功上色

    3.最后一个艺术家是最重要的,要是他有的颜色需要的栅栏没有就不可能成功上色,我们只要找到最后一个艺术家上色的位置编号,其他不需要的艺术家都在那个位置上色即可,如果这个位置原来的颜色和要上的色相同,还会占用一个该颜色的上色位

    #include <iostream>
    #include <cstring>
    #include <stdio.h>
    #include <algorithm>
    #include <set>
    #include<vector>
    #include<cmath>
    #include <map>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int, int> P;
    ll t;
    ll n,m;
    string s;
    ll a[100000+5],b[100000+5],c[100000+5];
    vector<int> dat[200000 + 5];
    ll cnt[200000 + 5];
    int main() {
    	ios::sync_with_stdio(0);
    	cin >> t;
    	while (t--)
    	{
    		vector<int> ans;
    		cin >> n >> m;
    		int pos=-1;
    		for (int i = 0; i < n; i++) {
    			cin >> a[i];
    			dat[i] = vector<int>();
    			cnt[i] = 0;
    		}
    		dat[n] = vector<int>();
    		cnt[n] = 0;
    		for (int i = 0; i < n; i++) {
    			cin >> b[i];
    			if (a[i] != b[i]) {
    				dat[b[i]].push_back(i);
    			}
    		}
    		for (int i = 0; i < m; i++) {
    			cin >> c[i];
    			cnt[c[i]]++;
    		}
    		int flag = 0;
    		int flag2 = 1;
    		for (int i = 0; i < n; i++) {
    			if (flag2&&b[i] == c[m - 1]) {
    				flag2 = 0;
    				pos = i;
    			}
    			if (!flag2&&a[i]!=b[i] && b[i] == c[m - 1]) {
    				flag2 = 0;
    				pos = i;
    			}
    		}
    		if (a[pos] == b[pos])cnt[b[pos]]--;
    		for (int i = 0; i < n; i++) {
    			if (a[i] != b[i])cnt[b[i]]--;
    			if (cnt[b[i]] < 0) {
    				flag = 1;
    				break;
    			}
    		}
    		if (flag+flag2) {
    			cout << "NO
    ";
    			continue;
    		}
    		for (int i = 0; i < m-1; i++) {
    			if (dat[c[i]].size() == 0)ans.push_back(pos);
    			else {
    				ans.push_back(dat[c[i]][0]);
    				dat[c[i]].erase(dat[c[i]].begin(), dat[c[i]].begin() + 1);
    			}
    		}
    		ans.push_back(pos);
    		cout << "YES
    ";
    		for (int i = 0; i < m; i++)cout << ans[i]+1 << ' ';
    		cout << '
    ';
    	}
    }
    

    D. AB Graph

    给定一个完全图,每条边的边权为a或者b,给定一个长度m,在图里走,问能不能,如何走成一个长度为m的回文串

    1.m为奇数,在两个点里转来转去就行

    2.n是2,要两条边相同

    3.m为偶数,在三个点里循环即可,先找到到一个点,指向其的边的边权和其指向下一个点的边权相同,反向走m/2的点找到启示点,转圈循环即可

    #include <iostream>
    #include <cstring>
    #include <stdio.h>
    #include <algorithm>
    #include <set>
    #include<vector>
    #include<cmath>
    #include <map>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int, int> P;
    ll t;
    ll n,m;
    string s;
    char dat[10005][10005];
    int main() {
    	ios::sync_with_stdio(0);
    	cin >> t;
    	while (t--)
    	{
    		cin >> n >> m;
    		for (int i = 0; i < n; i++)cin >> dat[i];
    		if (m % 2) {
    			cout << "YES
    ";
    			for (int i = 0; i <=m; i++)cout << 1 + i % 2 << ' ';
    			cout << '
    ';
    			continue;
    		}
    		if (n == 2) {
    			if (dat[0][1] == dat[1][0]) {
    				cout << "YES
    ";
    				for (int i = 0; i <=m; i++)cout << 1 + i % 2 << ' ';
    				cout << '
    ';
    			}
    			else cout << "NO
    ";
    			continue;
    		}
    		int pos;
    		for (int i = 0; i < 3; i++) 
    		if (dat[i][(i + 1) % 3] == dat[(i - 1 + 3) % 3][i])pos = i;
    		cout << "YES
    ";
    		for (int i = 0; i < m/2; i++)pos=(pos-1+3)%3;
    		for (int i = 0; i <= m; i++)cout << 1 + (pos + i) % 3<<' ';
    		cout << '
    ';
    	}
    }
    
    
    K-ON!!
  • 相关阅读:
    element、vue 使用
    .net bigint,long传到前端发现精度不对
    服务器工具安装
    银行分控模型的建立
    Firebase —— a readymade backend system
    PouchDB —— build applications that work as well offline
    ASP.NET 之 UserRoleIdentity
    insert conflict do update
    【PostgreSQL数据库】PostgreSQL数据库gdb调试子进程
    mac禁用chrome左右双指滑动手势返回上一页
  • 原文地址:https://www.cnblogs.com/pophirasawa/p/14385926.html
Copyright © 2020-2023  润新知