D2
T1
水题
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <ctime>
#define maxn 1000+10
using namespace std;
int n,m,q,x,y,z;
int color[maxn][2],tim[maxn][2];
int read()
{
int xx=0,kk=1;char ch=' ';
while(!isdigit(ch)){ch=getchar();if(ch=='-')kk=-1;}
while(isdigit(ch)){xx=xx*10+ch-'0';ch=getchar();}
return kk*xx;
}
void print()
{
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
printf("%d ",tim[i][0]>tim[j][1]?color[i][0]:color[j][1]);
puts("");
}
}
int main()
{
froepen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
n=read(),m=read(),q=read();
for(int i=1;i<=q;++i)
{
x=read(),y=read(),z=read();
color[y][x-1]=z;tim[y][x-1]=i;
}
print();
return 0;
}
T2
dp[i][0]表示第i步向上走的方案数,dp[i][1]表示向左/右的方案数,向左向右的方案是有对称性的所以处理一个就好啦
我们可以轻松的得到dp方程:
dp[i][0]=2*dp[i-1][0]+dp[i-1][1]; dp[i][1]=dp[i-1][0]+dp[i-1][1];
看了一眼数据范围,然后就很愉快的交给矩阵快速幂了
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <ctime>
#define ll long long
#define maxn 3
using namespace std;
int n;
const int plane=1e9+7;
struct matrix
{
ll m[maxn][maxn];
void clear()
{
for(int i=0;i<maxn;++i)
for(int j=0;j<maxn;++j)
m[i][j]=0;
}
}a,b,e;
int read()
{
int xx=0,kk=1;char ch=' ';
while(!isdigit(ch)){ch=getchar();if(ch=='-')kk=-1;}
while(isdigit(ch)){xx=xx*10+ch-'0';ch=getchar();}
return kk*xx;
}
matrix mul(matrix a,matrix b)
{
matrix c;c.clear();
for(int i=1;i<maxn;++i)
for(int j=1;j<maxn;++j)
for(int k=1;k<maxn;++k)
c.m[i][j]=(a.m[i][k]*b.m[k][j]%plane+c.m[i][j])%plane;
return c;
}
matrix poww(matrix a,int b)
{
matrix base=a,ans=e;
while(b)
{
if(b&1) ans=mul(ans,base);
base=mul(base,base);
b>>=1;
}
return ans;
}
int main()
{
freopen("coordinate.in","r",stdin);
freopen("coordinate.out","w",stdout);
n=read();a.clear();b.clear();e.clear();
a.m[1][1]=1,a.m[2][1]=1;e.m[1][1]=1,e.m[2][2]=1;
b.m[1][1]=1,b.m[1][2]=1,b.m[2][1]=2,b.m[2][2]=1;
matrix ans=mul(a,poww(b,n));
printf("%lld",(ans.m[1][1]+2*ans.m[1][2])%plane);
return 0;
}
T3
有点向通往奥格瑞玛的道路,SPFA+二分可做,然而那丑恶的数据范围让我以为爆搜可以过???然后我就很懒的打了个dfs就交了,亲手断送自己的ak道路。今天时间不够,还没来得及写正解,先糊着叭