Codeforces Round #199 (Div. 2)

A: 有n个数 选出n/3个3元组 不能选出n/3输出-1 能的话输出n/3个3元组 每个数最多是7 。3元组a,b,c要求a < b < ca divides bb divides c.   算算其实只有 1 2 4 , 1  2 6 , 1 3 6   这3种  模拟一下 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define clr(x) memset(x,0,sizeof(x))
int n;
int a[1000];
int t[1000];
int main()
{
    int i,tt;
    while(scanf("%d",&n)!=EOF){
        clr(a);
        for(i=0;i<n;i++)
        {
            scanf("%d",&tt);
            a[tt]++;
        }
        for(i=0;i<=7;i++)
        t[i]=a[i];
        if(a[5]||a[7]){printf("-1\n");continue;}
        else {
            if(a[3]){
                a[1]=a[1]-a[3];
                a[6]=a[6]-a[3];
                a[3]=0;
            }
            if(a[1]<0||a[6]<0){printf("-1\n");continue;}
            if(a[1]!=a[2]||a[1]!=a[4]+a[6]){printf("-1\n");continue;}

        }
        for(i=0;i<t[4];i++){
            printf("1 2 4\n");
        }
        for(i=0;i<t[2]-t[4];i++){
            printf("1 2 6\n");
        }
        for(i=0;i<t[3];i++){
            printf("1 3 6\n");
        }
    }
    return 0;
}
B:n个间谍 信息从l传到r  m组监视 时间 和 id l-id r范围 求怎么传递信息 最短时间 从l到r。  m个组先按时间排个序。模拟一下 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define clr(x) memset(x,0,sizeof(x))
int n,m,l,r;
struct node {
    int t,a,b;
}s[200000];
int cmp(struct node a,struct node b){
    return a.t<b.t;
}
int main()
{
    int flag,i;
    while(scanf("%d%d%d%d",&n,&m,&l,&r)!=EOF){
        int ti=1;
        for(i=0;i<m;i++)
            scanf("%d%d%d",&s[i].t,&s[i].a,&s[i].b);
            sort(s,s+m,cmp);
            int pos=l;
            if(l<r)flag=1;
            if(l>r)flag=0;
            if(l==r){printf("X\n");continue;}
            for(i=0;i<m;i++){
                while(ti<s[i].t){
                    if(flag){printf("R");pos++;if(pos==r){goto loop;}}
                    else {printf("L");pos--;if(pos==r){goto loop;}}
                    ti++;
                }
                if(pos>=s[i].a&&pos<=s[i].b)printf("X");
                else if(flag&&pos+1>=s[i].a&&pos+1<=s[i].b)printf("X");
                else if(flag==0&&pos-1>=s[i].a&&pos-1<=s[i].b)printf("X");
                else {
                    if(flag){printf("R");pos++;if(pos==r)goto loop;}
                    else {printf("L");pos--;if(pos==r)goto loop;}
                }
                ti++;
            }
            while(1){
                if(flag){printf("R");pos++;if(pos==r)break;}
                else {printf("L");pos--;if(pos==r)break;}
                ti++;
            }
        loop: printf("\n");continue;
    }
    return 0;
}

 C被cha 了 = =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值