1003.Clockwise or Counterclockwise
签到
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=200005;
ll t,n;
ll a1,a2,a3,b1,b2,b3;
int main()
{
cin>>t;
while(t--)
{
cin>>a1>>b1>>a2>>b2>>a3>>b3;
ll x1=a2-a1,y1=b2-b1,xx=a3-a1,yy=b3-b1;
ll ans=x1*yy-xx*y1;
if(ans<0)
cout<<"Clockwise"<<endl;
else
cout<<"Counterclockwise"<<endl;
}
return 0;
}
1006.Fluctuation Limit
思维
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+10;
const int mod=1e9+7;
int l[maxn],r[maxn],a[maxn],b[maxn],f[maxn];
int main()
{
int t,n,k;
cin>>t;
while(t--)
{
scanf("%d %d",&n,&k);
int flag=0;
for(int i=1;i<=n;i++)
{
scanf("%d %d",&a[i],&b[i]);
if(i==1)
l[i]=a[i],r[i]=b[i];
else
{
l[i]=max(l[i-1]-k,a[i]);
r[i]=min(r[i-1]+k,b[i]);
if(l[i]>r[i])
flag=1;
}
}
if(flag)
printf("NO\n");
else
{
printf("YES\n");
int x=r[n];
f[n]=x;
for(int i=n-1;i>=1;i--)
{
x=max(l[i],x-k);
f[i]=x;
}
printf("%d",f[1]);
for(int i=2;i<=n;i++)
{
printf(" %d",f[i]);
}
printf("\n");
}
}
return 0;
}
1008.Hexagon
dfs贪心
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=2e3+10;
const int mod=1e9+7;
int a[1005][1005],n,cnt,h[1005];
int l[10],r[10];
void dfs(int x,int y,int f,int op,int last)
{
//cout<<x<<' '<<y<<endl;
a[x][y]=0;
//cnt++;
int xx,yy,m;
for(int i=1;i<=6;i++)
{
xx=x+l[i];
yy=y+r[i];
if(x<n&&(i==2||i==3))
yy++;
if(x>n&&(i==5||i==6))
yy++;
m=min(xx-1,min(yy-1,min(h[xx]-yy,2*n-1-xx)));
if(a[xx][yy]&&i!=f&&m<=op&&m!=last)
{
printf("%d",i);
dfs(xx,yy,i,op,m);
return ;
}
}
for(int i=1;i<=6;i++)
{
xx=x+l[i];
yy=y+r[i];
if(x<n&&(i==2||i==3))
yy++;
if(x>n&&(i==5||i==6))
yy++;
m=min(xx-1,min(yy-1,min(h[xx]-yy,2*n-1-xx)));
if(a[xx][yy]&&i!=f&&m<=op)
{
printf("%d",i);
dfs(xx,yy,i,op,m);
return ;
}
}
for(int i=1;i<=6;i++)
{
xx=x+l[i];
yy=y+r[i];
if(x<n&&(i==2||i==3))
yy++;
if(x>n&&(i==5||i==6))
yy++;
m=min(xx-1,min(yy-1,min(h[xx]-yy,2*n-1-xx)));
if(a[xx][yy]&&i!=f)
{
printf("%d",i);
dfs(xx,yy,i,op+2,m);
return ;
}
}
}
int main()
{
int t;
l[1]=0,l[2]=1,l[3]=1,l[4]=0,l[5]=-1,l[6]=-1;
r[1]=1,r[2]=0,r[3]=-1,r[4]=-1,r[5]=-1,r[6]=0;
cin>>t;
while(t--)
{
scanf("%d",&n);
cnt=0;
for(int i=1;i<=2*n-1;i++)
{
if(i<=n)
{
for(int j=1;j<=n+i-1;j++)
a[i][j]=1;
h[i]=n+i-1;
}
else
{
for(int j=1;j<=3*n-1-i;j++)
a[i][j]=1;
h[i]=3*n-1-i;
}
}
dfs(1,n,0,1,1);
printf("\n");
//cout<<cnt<<' '<<3*n*(n-1)+1<<endl;
}
return 0;
}
1009.Isomorphic Strings
思维,数学
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=6e6+10;
const int mod=1e9+7;
char s[maxn];
int f[30],p[maxn];
int gcd(int a,int b)
{
if(a==0)
return b;
else if(b==0)
return a;
else if(a%b==0)
return b;
else
return gcd(b,a%b);
}
int main()
{
int t,n,k,num,x;
cin>>t;
while(t--)
{
scanf("%d %s",&n,s+1);
memset(f,0,sizeof(f));
if(n==1)
{
printf("No\n");
continue;
}
else
{
int j=0;
for(int i=2;i<=n;i++)
{
while(j&&s[j+1]!=s[i])
j=p[j];
if(s[j+1]==s[i])
j++;
p[i]=j;
}
/*for(int i=1;i<=n;i++)
printf("%d ",p[i]);
cout<<endl;*/
}
for(int i=1;i<=n;i++)
f[s[i]-'a']++;
k=0,num=0;
for(int i=0;i<26;i++)
{
k=gcd(k,f[i]);
if(f[i])
num++;
}
if(num==1)
{
printf("Yes\n");
continue;
}
//cout<<k<<endl;
int flag=0;
for(int i=2;i<=k;i++)
{
if(k%i==0&&n/i>=num)
{
flag=1;
for(int j=2;j<=i;j++)
{
x=p[j*(n/i)];
for(int l=x+1;l<=n/i;l++)
{
if(s[l]!=s[(j-1)*(n/i)+l-x])
{
flag=0;
break;
}
}
//cout<<flag<<endl;
if(flag==0)
break;
}
}
if(flag)
break;
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}