您的位置:首页 > 其它

Codeforces Round #199 (Div. 2)

2013-09-07 20:40 363 查看
A: 有n个数 选出n/3个3元组 不能选出n/3输出-1 能的话输出n/3个3元组 每个数最多是7 。3元组a,b,c要求a < b < c; a divides b, b 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 了 = =
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: