6298 Maximum Multiple
把整数因式分解,3的倍数一定可以,最小质因数5以上不可能(分数相加关系),只要考虑2、3、4。只是2的倍数而不是4的倍数,不会有三个因数相加为原数
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int t;
for(int i=0;i<n;i++)
{
scanf("%d",&t);
if(t==1||t==2)
{
printf("-1\n");
}
else if(t%3==0)
{
ll a=t/3;
printf("%lld\n",a*a*a);
}
else if(t%4==0)
{
ll a=t/4;
printf("%lld\n",a*a*a*2);
}
else printf("-1\n");
}
}
6300 Triangle Partition
不要用边长做法
#include<bits/stdc++.h>
using namespace std;
struct pt{
int x,y,id;
}p[3003];
int vis[3003];
bool cmp(pt p1, pt p2)
{
return p1.x<p2.x;
}
int ptr=0;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ptr=0;
memset(vis,0,sizeof(vis));
int n;
scanf("%d",&n);
for(int i=1;i<=3*n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
pt npt;
npt.x=x;npt.y=y;npt.id=i;
p[i]=npt;
}
sort(p,p+n*3,cmp);
int ct=0;
for(int i=0;i<n;i++)
{
printf("%d %d %d\n",p[3*i].id,p[3*i+1].id,p[3*i+2].id);
}
}
}
6301 Distinct Values
与之前不相交的,中间填1,之后从1开始;与之前相交的,需要记录哪些数字已经用过。
#include<bits/stdc++.h>
using namespace std;
struct seq{
int l,r;
bool friend operator <(seq s1, seq s2)
{
if(s1.l!=s2.l)return s1.l<s2.l;
else return s1.r>s2.r;
}
}s[100005];
int ans[100005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&s[i].l,&s[i].r);
}
sort(s,s+m);
for(int i=1;i<s[0].l;i++)
{
ans[i]=1;
//printf("front the %d is 1\n",i);
}
int maxr=0,lastl=0,now=1,ptr=1;
int usd[100005];
memset(usd,0,sizeof(usd));
for(int i=0;i<m;i++)
{
if(s[i].r<maxr)continue;
if(s[i].l>maxr)
{
memset(usd,0,sizeof(usd));
for(int j=maxr+1;j<s[i].l;j++)
{
//printf("ans %d = 1\n",j);
ans[j]=1;
}
for(int j=s[i].l;j<=s[i].r;j++)
{
// printf("ans %d = %d\n",j,j-s[i].l+1);
ans[j]=j-s[i].l+1;
usd[ans[j]]=1;
}
}
else
{
for(int j=lastl;j<s[i].l;j++)
{
usd[ans[j]]=0;
// printf("usd %d is set 0\n",ans[j]);
}
// printf("\n");
int ca=1;
for(int j=maxr+1;j<=s[i].r;j++)
{
while(usd[ca])ca++;
//printf("normal ans %d is %d\n",i,i-maxr-1);
ans[j]=ca;
usd[ca]=1;
}
}
maxr=s[i].r;
lastl=s[i].l;
}
int mr=0;
for(int i=0;i<m;i++)
{
mr=max(mr,s[i].r);
}
for(int i=mr+1;i<=n;i++)
{
ans[i]=1;
}
for(int i=1;i<=n;i++)
{
printf("%d",ans[i]);
if(i!=n)printf(" ");
}
printf("\n");
}
}
6308 Time zone
水题
#include<bits/stdc++.h>
using namespace std;
struct ti{
int h,m;
};
ti addint(ti t0,int ad)
{
ad-=8;
t0.h+=ad;
if(t0.h>=24)t0.h-=24;
if(t0.h<0)t0.h+=24;
return t0;
}
ti add2(ti t0,int ad,int pt)
{
// printf("ad %d pt %d\n",ad,pt);
ad-=8;
int abo=0,low=0;
int amm=pt*6;
t0.m+=amm;
if(t0.m>=60)
{
t0.m-=60;
abo=1;
}
if(t0.m<0)
{
t0.m+=60;
low=1;
}
t0.h+=ad;
if(abo)t0.h++;
if(low)t0.h--;
if(t0.h>=24)t0.h-=24;
if(t0.h<0)t0.h+=24;
return t0;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int h,m;
char s[10];
scanf("%d %d %s",&h,&m,&s);
ti tbj;
tbj.h=h;
tbj.m=m;
//printf("\n%d %d %s",h,m,s);
if(strlen(s)==5)
{
if(s[3]=='+')
{
tbj=addint(tbj,s[4]-'0');
}
else
{
tbj=addint(tbj,-(s[4]-'0'));
}
}
else if(strlen(s)==6)
{
if(s[3]=='+')
{
tbj=addint(tbj,10*(s[4]-'0')+s[5]-'0');
}
else
{
tbj=addint(tbj,-10*(s[4]-'0')-s[5]+'0');
}
}
else if(strlen(s)==7)
{
if(s[3]=='+')
{
tbj=add2(tbj,s[4]-'0',s[6]-'0');
}
else
{
tbj=add2(tbj,-s[4]+'0',-s[6]+'0');
}
}
else if(strlen(s)==8)
{
if(s[3]=='+')
{
tbj=add2(tbj,10*(s[4]-'0')+s[5]-'0',s[7]-'0');
}
else
{
tbj=add2(tbj,-10*(s[4]-'0')-s[5]+'0',-s[7]+'0');
}
}
printf("%02d:%02d\n",tbj.h,tbj.m);
}
}