Gym - 102152

博客列举了一系列算法相关题目,包括内存管理系统、大最大公约数、异或排列、字符串构建等,涵盖了不同类型的算法问题,为算法学习和研究提供了多样的示例。

B - Memory Management System

 

#include<bits/stdc++.h>
using namespace std;
struct nomd
{
	int x,y,c;
}a[100006],b[100006],c[100006];
int cmp(nomd a,nomd b)
{
	return a.x<b.x;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,m,w;
		scanf("%d %d %d",&n,&m,&w);
		for(int i=0;i<n;i++)
		{
			scanf("%d %d",&a[i].x,&a[i].y);
		}
		sort(a,a+n,cmp);
		int x=a[0].y,k=0;
		if(a[0].x!=1)
		b[++k].x=1,b[k].y=a[0].x-1,b[k].c=b[k].y-b[k].x+1;
		for(int i=1;i<n;i++)
		{
			if(a[i].x-1>=x+1)
			{
				b[++k].x=x+1;
				b[k].y=a[i].x-1;
				b[k].c=b[k].y-b[k].x+1;
			}
			x=max(x,a[i].y);
		}
		if(x!=m)
		b[++k].x=x+1,b[k].y=m,b[k].c=b[k].y-b[k].x+1;
//		for(int i=1;i<=k;i++)
//		printf("----%d %d %d\n",b[i].x,b[i].y,b[i].c);
		int e=0,q=0; 
		for(int i=k;i>=1;i--)
		{
			if(b[i].c>q)
			{
				q=b[i].c;c[++e].x=b[i].x;c[e].y=b[i].y;c[e].c=b[i].c;
			}
		}
		for(int i=0;i<w;i++)
		{
			int o,ok=0;
			scanf("%d",&o);
			if(n==0)
			{
				if(m>=o)
				printf("%d %d\n",m-o+1,m);
				else
				printf("-1 -1\n");
				break;
			}
			for(int j=1;j<=e;j++)
			{
				if(c[j].c>=o)
				{
					ok=1;printf("%d %d\n",c[j].y-o+1,c[j].y);break;
				}
			}
			if(ok==0)
			printf("-1 -1\n");
		}
	}
	return 0;
}

C - Large GCD

 

#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
#define line cout<<"------------"<<endl

typedef long long ll;
const int maxn = 2e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 1010;



int main(){
    int t, a, b;
    scanf("%d", &t);
    while(t--){
        scanf("%d%d", &a, &b);
        if(a%2 == 0 || b % 2==0) printf("2\n");
        else printf("12\n");
    }
    return 0;
}

D - XOR Permutations

 

E - Building Strings

#include<bits/stdc++.h>
using namespace std;
char s[3000+10];
char c[3000+10];
int val[100];
char ss[100];

int main(){
	int _;
	scanf("%d",&_);
	while(_--){
		for(int i=0;i<100;i++)
		val[i]=1000;
		int a,b;
		scanf("%d%d",&a,&b);
		scanf("%s",s);
		scanf("%s",c);
		for(int i=0;i<a;i++){
			val[s[i]-'a']=min(c[i]-'0',val[s[i]-'a']);
		}
		scanf("%s",ss);
		 int sum=0;
		for(int i=0;i<b;i++){
			sum+=val[ss[i]-'a'];
		}
		if(sum>=1000){
			printf("-1\n");
		}else
			printf("%d\n",sum);
	}
	
	return 0;
}

 

 

F - camelCase;

 

#include<bits/stdc++.h>
using namespace std;
char  a[2000];
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		scanf("%s",a);
		int len=strlen(a);
		int ans=0;
		
		for(int i=0;i<len;i++)
		{
			if(a[i]>='A'&&a[i]<='Z')
			ans++;
		}
		if(a[0]>='a'&&a[0]<='z') 
		ans++;
		if(ans<=7) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

 

 

G - The Special King

 

#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
#define line cout<<"------------"<<endl


const int maxn = 2e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 1010;



int main(){
    int t;
    scanf("%d", &t);
    while(t--){
        int a, b, x, y;
        scanf("%d%d%d%d", &a, &b, &x, &y);
        int ans = abs(a-x) + abs(b-y);
        printf("%d\n", ans);
    }
	return 0;
}

 

 

H - The Universal String

 

#include<bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 1010;

int n;
char s[N];


int main(){
    scanf("%d", &n);
    getchar();
    while(n--){
        gets(s);
        int len = strlen(s);
        bool flag = true;
        char pre = s[0];
        for(int i = 1; i < len; i++){
            if(pre == 'z'){
                if(s[i] == 'a'){
                    pre = 'a';continue;
                }
                else {
                    flag = false; break;
                }
            }
            else{
                if(s[i]-'a'-1 == pre-'a'){
                    pre = s[i];continue;
                }
                else {
                    flag = false; break;
                }
            }
        }
        if(flag) printf("YES\n");
        else printf("NO\n");
    }
	return 0;
}

 

 

I - Array Negations

 

#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
#define line cout<<"------------"<<endl

typedef long long ll;
const int maxn = 2e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 10010;



int main(){
    int t;
    cin >> t;
    while(t--){
        int n, k, sum = 0;;
        int a[N];
        scanf("%d%d", &n, &k);
        int n0 = 0, nn = 0, n2 = 0;
        for(int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
            if(a[i] == 0) n0 ++;
            else if(a[i] < 0) nn++;
            else n2++;
        }
        sort(a, a+n);
        int i = 0;
        while(k && nn){
            a[i] = -a[i];
            i++; k--; nn--;
        }
        if(n0 > 0){
            for(int i = 0; i < n; i++) sum += a[i];
        }
        else{
            sort(a, a+n);
            if(k & 1) {
                a[0] = -a[0];
                for(int i = 0; i < n; i++) sum += a[i];
            }
            else for(int i = 0; i < n; i++) sum += a[i];
        }
        printf("%d\n", sum);
    }
    return 0;
}

 

 

J - Grid Beauty

 

#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
#define line cout<<"------------"<<endl

typedef long long ll;
const int maxn = 2e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 1010;

int n, m;
int a[N][N];


int main(){
    int T;
    scanf("%d", &T);
    while(T--){
        unordered_map<int, int>mp1;
        unordered_map<int, int>mp2;
        scanf("%d%d", &n, &m);
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                scanf("%d", &a[i][j]);
            }
        }
        int ans = 0;
        for(int i = 0; i < n-1; i++){
            for(int j = 0; j < m; j++){
                mp1[a[i][j]] ++;
                mp2[a[i+1][j]]++;
            }
            for(int j = 0; j < m; j++){
                if(mp1[a[i+1][j]] > 0){
                    ans += min(mp1[a[i+1][j]], mp2[a[i+1][j]]);
                    mp2[a[i+1][j]] = 0;
                }
            }
            for(int j = 0; j < m; j++){
                mp1[a[i][j]] = 0;
                mp2[a[i+1][j]] = 0;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

 

K - Subarrays OR

 

#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
#define line cout<<"------------"<<endl

typedef long long ll;
const int maxn = 2e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 1010;

int n, m;
int p[maxn];


int main(){
    int T;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        for(int i = 0; i < n; i++){
            scanf("%d", &p[i]);
        }
        set<int>a, b, c;
        for(int j = 0; j < n; j++){
            a.clear();
            a.insert(p[j]);
            for(auto i : b){
                a.insert(i | p[j]);
            }
            b = a;
            for(auto i : a) c.insert(i);
        }
        printf("%d\n", c.size());
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值