A题题意:给出n个数,给出[L,R]区间,把区间内的战士消灭掉,并且区间无重复,分别求出L左边R右边第一个存活的位置
思路:因为区间无重复,所以直接更新左端点和右端点
理解题目错了,以为是从左边1开始数到L-1第一个存活的位置,原来是从L-1开始数到1
代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int M=100010;
int l[M],r[M];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m),n|m)
{
for(int i=1; i<=n; i++)
{
l[i]=i-1;
r[i]=i+1;
}
int s,e;
while(m--)
{
scanf("%d%d",&s,&e);
int ll=l[s];
int rr=r[e];
if(ll==0)printf("* ");
else printf("%d ",ll);
if(rr==n+1)printf("*\n");
else
printf("%d\n",rr);
r[ll]=rr;
l[rr]=ll;
}
printf("-\n");
}
return 0;
}
I题真的是一大水题呀,直接模拟就行,可是我还是出了好多错,连我都对自己无语了
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
using namespace std;
char a[1005];
char ss[5][1005];
int n;
int main()
{
char s[20];
while(scanf("%d",&n)&&n!=0)
{
scanf("%s",s);
if(s[0]=='S')
{
scanf("%s",a);
int l=strlen(a);
for(int j=1; j<=3; j++)
{
for(int i=0; i<l; i++)
{
if(j==1)
{
if(a[i]=='1')
printf("*.");
else if(a[i]=='2')
{
printf("*.");
}
else if(a[i]=='3')
{
printf("**");
}
else if(a[i]=='4')
printf("**");
else if(a[i]=='5')
printf("*.");
else if(a[i]=='6')
printf("**");
else if(a[i]=='7')
printf("**");
else if(a[i]=='8')
printf("*.");
else if(a[i]=='9')
printf(".*");
else if(a[i]=='0')
printf(".*");
if(i!=l-1)
printf(" ");
}
else if(j==2)
{
if(a[i]=='1')
printf("..");
else if(a[i]=='2')
printf("*.");
else if(a[i]=='3')
printf("..");
else if(a[i]=='4')
printf(".*");
else if(a[i]=='5')
printf(".*");
else if(a[i]=='6')
printf("*.");
else if(a[i]=='7')
printf("**");
else if(a[i]=='8')
printf("**");
else if(a[i]=='9')
printf("*.");
else if(a[i]=='0')
printf("**");
if(i!=l-1)
printf(" ");
}
else if(j==3)
{
if(a[i]=='1')
printf("..");
else if(a[i]=='2')
printf("..");
else if(a[i]=='3')
printf("..");
else if(a[i]=='4')
printf("..");
else if(a[i]=='5')
printf("..");
else if(a[i]=='6')
printf("..");
else if(a[i]=='7')
printf("..");
else if(a[i]=='8')
printf("..");
else if(a[i]=='9')
printf("..");
else if(a[i]=='0')
printf("..");
if(i!=l-1)
printf(" ");
}
}
printf("\n");
}
}
else
{
int l;
getchar();
for(int i=0; i<3; i++)
{
gets(ss[i]);
l=strlen(ss[i]);
}
string aa;
for(int i=0; i<l; i++)
{
aa="";
aa+=ss[0][i];
aa+=ss[0][i+1];
aa+=ss[1][i];
aa+=ss[1][i+1];
aa+=ss[2][i];
aa+=ss[2][i+1];
if(aa=="*.....")printf("1");
else if(aa=="*.*...")printf("2");
else if(aa=="**....")printf("3");
else if(aa=="**.*..")printf("4");
else if(aa=="*..*..")printf("5");
else if(aa=="***...")printf("6");
else if(aa=="****..")printf("7");
else if(aa=="*.**..")printf("8");
else if(aa==".**...")printf("9");
else if(aa==".***..")printf("0");
i+=2;
}
printf("\n");
}
}
return 0;
}
K题
代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
if(!a && !b && !c)break;
if(a>b)swap(a,b);
if(a>c)swap(a,c);
if(b>c)swap(b,c);
//cout<<a<<" "<<b<<" "<<c<<endl;
if(a==b && b==c && a==c)
{
if(a==13)
printf("*\n");
else
printf("%d %d %d\n",a+1,b+1,c+1);
}
else if(a==b)
{
if(c==13)
printf("1 %d %d\n",a+1,a+1);
else
printf("%d %d %d\n",a,a,c+1);
}
else if(b==c)
{
if(a+1==b)
{
if(b==13)
printf("1 1 1\n");
else
printf("%d %d %d\n",b,c,b+1);
}
else
printf("%d %d %d\n",a+1,c,c);
}
else if(a!=b && b!=c && a!=c)
{
printf("1 1 2\n");
}
}
return 0;
}