我的代码在acwing上提交,通过数据也是acwing显示的。
数据与官方数据不一定相同。
#include
#include
#include
using namespace std;
int main()
{
int num;
num=2*9*9*9+0*9*9+2*9+2;
printf("%d\n",num);
}
#include
#include
#include
using namespace std;
int sum=0;
void dfs(int x,int y)
{
int a[10];
a[1]=2;a[2]=0;a[3]=2;a[4]=2;
a[5]=x/10;a[6]=x%10;
a[7]=y/10;a[8]=y%10;
for(int i=1;i<=6;i++)
{
// if(a[i]==a[i+1]+1&&a[i]==a[i+2]+2)// printf("2020%02d%02d %d %d %d %d\n",x,y,i,a[i],a[i+1],a[i+2]);
// {
// for(int j=1;j<=8;j++)
// printf("%d ",a[j]);sum++;
// printf(" %d\n",sum);
//
// }
if(a[i]==a[i+1]-1&&a[i]==a[i+2]-2)// printf("2020%02d%02d\n",x,y);
{
for(int j=1;j<=8;j++)
printf("%d ",a[j]);sum++;
printf(" %d\n",sum);
break;
}
}
}
int main()
{
int i,j,n,m;
for(i=1;i<=12;i++)
{
for(j=1;j<=31;j++)
{
if(i==2&&j>28) break;
if((i==4||i==6||i==9||i==11)&&j>30) break;
dfs(i,j);
}
}
printf("%d\n",sum);
}
#include
#include
#include
using namespace std;
int main()
{
long long i,j,n,m,m1;
long long a,b,n1;
scanf("%lld %lld %lld",&a,&b,&n);
m=5*a+2*b;
m1=n/m;
n=n%m;
if(n==0) printf("%lld\n",m1*7);
else
{
for(i=1;i<=7;i++)
{
if(i<=5) n=n-a;
else n=n-b;
if(n<=0) break;
}
printf("%lld\n",m1*7+i);
}
return 0;
}
#include
#include
#include
using namespace std;
const int N=10010;
int a[N],b[N],book[N];
int main()
{
int i,j,n,m,t;
scanf("%d",&n);
for(i=1,t=1;i<=n;i++,t++)
{
a[i]=max(a[i],t-book[i]);
book[i]=t;
}
for(i=n-1,t=t;i>=1;i--,t++)
{
a[i]=max(a[i],t-book[i]);
book[i]=t;
}
for(i=2,t=t;i<=n;i++,t++)
{
a[i]=max(a[i],t-book[i]);
book[i]=t;
}
for(i=1;i<=n;i++)
printf("%d\n",a[i]);
return 0;
}
#include
#include
#include
using namespace std;
const int N=1010;
long long a[N],b[N],c[N];
int main()
{
int i,j,k,la,lb;
scanf("%d",&k);
scanf("%d",&la);
for(i=la;i>=1;i--)
scanf("%lld",&a[i]);
scanf("%d",&lb);
for(i=lb;i>=1;i--)
scanf("%lld",&b[i]);
c[0]=1;
for(i=1;i<=la||i<=lb;i++)
{
if(a[i]==0&&b[i]!=0) c[i]=b[i]+1;
else if(a[i]!=0&&b[i]==0) c[i]=a[i]+1;
else if(a[i]==0&&b[i]==0) c[i]=2;
else c[i]=max(a[i]+1,b[i]+1);
}
for(i=1;i<=la||i<=lb;i++)
{
if(a[i]<b[i]) a[i+1]-=1,a[i]+=c[i];
a[i]=a[i]-b[i];//printf(" %lld\n",a[i]);
}//printf("\n");
long long sum=0;
for(i=la;i>=1;i--)
{
sum=a[i]+sum*c[i];
sum=sum%1000000007;
// printf("%lld %lld %lld\n",a[i],sum,c[i]);
}
printf("%lld\n",sum);
return 0;
}
写的不太对,数据没有全通过,通过90%。
#include
#include
#include
using namespace std;
using namespace std;
typedef long long LL;
const int N=510;
LL a[N][N],b[N][N],cnt,n,m,k;
inline LL calc(int x1,int y1,int x2,int y2)
{
return b[x2][y2]-b[x2][y1-1]-b[x1-1][y2]+b[x1-1][y1-1];
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%lld",&a[i][j]);
b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j];
}
}
for(int l=1;l<=m;l++)//枚举矩阵的左边
{
for(int r=l;r<=m;r++)//枚举矩阵的右边
{
for(int i=1,j=1;i<=n;i++)//有了左右边界,从上到下双指针扫描
{
while(j<=i&&calc(j,l,i,r)>k) j++;
if(j<=i) cnt+=(i-j+1);//有可能最小的矩阵都不满足,此时j>i
}
}
}
printf("%lld",cnt);
return 0;
}
不会
时间超限,通过50%。
#include
#include
#include
using namespace std;
const int N=50010;
struct no
{
int x;
int y;
int r;
}a[N];
int book[N],b[N][9000];
void dfs(int x)
{
int i,j;
book[x]=1;
for(i=1;i<=b[x][0];i++)
{
// printf("*****%d\n",b[x][i]);
if(book[b[x][i]]) continue;
dfs(b[x][i]);
}
}
int main()
{
int i,j,n,m;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].r);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j) continue;
if((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)<=(a[i].r*a[i].r))
{
b[i][0]++;
b[i][b[i][0]]=j;
}
}
}
// for(i=1;i<=n;i++)
// {
// printf("****%d ",b[i][0]);
// for(j=1;j<=b[i][0];j++)
// printf("%d ",b[i][j]);
// printf("\n");
// }
for(i=1;i<=m;i++)
{
int x,y,r;
scanf("%d %d %d",&x,&y,&r);
for(j=1;j<=n;j++)
{
if(book[j]) continue;
// printf("*****%d %d\n",(a[j].x-x)*(a[j].x-x)+(a[j].y-y)*(a[j].y-y),r*r);
if((a[j].x-x)*(a[j].x-x)+(a[j].y-y)*(a[j].y-y)<=(r*r))
{
dfs(j);
}
}
}
int sum=0;
for(i=1;i<=n;i++)
if(book[i]) sum++;
printf("%d\n",sum);
return 0;
}
数据太大,只通过10%。
#include
#include
#include
using namespace std;
int n,m,sum,num;
int a[210];
void dfs(int step)
{
if(step==n+m)
{
int n1,m1;
n1=m1=0;
for(int i=1;i<=n+m;i++)
{
if(a[i]) n1++;
else m1++;
}
if(n1==n&&m1==m)
{
long long num=2;
for(int i=1;i<=n+m;i++)
{
if(a[i]) num=num*2;
else num--;
}
if(num==0) sum++;
}
return;
}
a[step]=1,dfs(step+1);
a[step]=0,dfs(step+1);
}
int main()
{
int i,j;
scanf("%d %d",&n,&m);//n店,m花
a[1]=1,dfs(2);//n,店
a[1]=0,dfs(2);//m,花
printf("%d\n",sum);
return 0;
}
不会
这次最大的问题就是数据范围没有看准,有的数据范围是105但是我只开了103。
以后绝对不可以出现这样的重大事故。
最终结果还可以省一。