# The 2018 ACM-ICPC China JiangSu (2018徐州邀请赛)(solve9/11)

A题:

#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int Map[2005][2005];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int k,a,b,Max=-1;
scanf("%d",&k);
memset(Map,INF,sizeof(Map));
while(k--)
{
scanf("%d%d",&a,&b);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
Map[i][j]=min(Map[i][j],abs(a-i)+abs(b-j));
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
Max=max(Max,Map[i][j]);

int flag=1;
for(int i=1;i<=n && flag;i++)
{
for(int j=1;j<=m;j++)
{
if(Map[i][j]==Max)
{
printf("%d %d\n",i,j);
flag=0;
break;
}
}
}
}
return 0;
} 

B题

#include<bits/stdc++.h>
using namespace std;
const long long mod = 1e9+7;
struct node{
int n;
int k;
int id;
}no[5005];
bool cmp(node a,node b)
{
return a.n<b.n;
}
long long dp[3][5005];
long long ans[5005];
int main()
{
int cnt=0;
int n,k,l=0;
while(scanf("%d%d",&n,&k)!=EOF)
{
no[cnt].n=n;
no[cnt].k=k;
no[cnt].id=cnt;
cnt++;
}
sort(no,no+cnt,cmp);
dp[0][0]=1;
for(int i=1;i<=5000;i++)
{
long long sum=0;
for(int j=0;j<=5000;j++)
{
sum=(sum+dp[i-1&1][j])%mod;
if(j>=i)
sum=(sum-dp[i-1&1][j-i]+mod)%mod;
dp[i&1][j]=sum;
}
while(l<cnt && no[l].n==i)
{
ans[no[l].id]=dp[i&1][no[l].k];
l++;
}
}
for(int i=0;i<cnt;i++)
printf("%lld\n",ans[i]);
return 0;
} 

D题

E题

G题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
int n, m;
ll a[maxn], X, Y, Z, mod;
ll s[maxn], e[maxn];
int main()
{
while(scanf("%d%d%lld", &n, &m, &mod) != EOF){
scanf("%lld%lld%lld%lld", &a[0], &X, &Y, &Z);
for(int i = 1; i < n; i++)
a[i] = (X * a[i - 1] % mod * a[i - 1] % mod + Y * a[i - 1] % mod + Z) % mod;

for(int i = 0; i < n; i++)
if(i % m == 0)
s[i] = a[i] % mod;
else
s[i] = s[i - 1] * a[i] % mod;
for(int i = n - 1; i >= 0; i--)
if((i + 1) % m == 0 || i == n - 1)
e[i] = a[i] % mod;
else
e[i] = e[i + 1] * a[i] % mod;

ll ans = 0;
for(int i = 0; i <= n - m; i++)
if(i % m == 0)
ans += e[i];
else
ans = ans + (s[i + m - 1] * e[i]) % mod;

printf("%lld\n", ans);
}

return 0;
}

H题

https://github.com/ICPCCamp/BlackBoxLinearAlgebra  （出题人附送的PPT+代码）

I题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct matrix{
int row,col;
ll A[105][105];
matrix(int Row=0,int Col=0){
memset(A,0,sizeof(A));
row=Row;col=Col;
}
};

matrix operator *(matrix a,matrix b){
matrix c(a.row,b.col);
for(int i=0;i<a.row;i++)
for(int j=0;j<b.col;j++)
for(int k=0;k<a.col;k++)
c.A[i][j]=max(c.A[i][j],a.A[i][k]+b.A[k][j]);
return c;
}
matrix matrix_pow(matrix a,ll n){
matrix ans(a.row,a.col);
for(int i=0;i<a.row;i++)
ans.A[i][i]=0;
while(n){
if(n%2)
ans=a*ans;
a=a*a;
n/=2;
}
return ans;
}
int main()
{
ll k;
int m;
while(scanf("%lld%d",&k,&m)!=EOF)
{
matrix temp(m,m);
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
scanf("%lld",&temp.A[i][j]);
temp=matrix_pow(temp,k-1);
ll ans=0;
for(int i=0;i<m;i++)
for(int j=0;j<m;j++)
ans=max(ans,temp.A[i][j]);
printf("%lld\n",ans);
}
return 0;
} 

J题

K题

#include<bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long Count[105];
int Map[105][105];
char str[105][105];
int dist[105];
int vis[105];
struct node{
int v;
int valu;
int next;
}no[100*100*2];
int cnt,n;
{
no[cnt].v=v;
no[cnt].valu=valu;
}
void spfa(int u)
{
for(int i=0;i<=n;i++)
{
vis[i]=0;
dist[i]=1<<29;
}
vis[u]=1;
dist[u]=0;
queue<int>q;
q.push(u);
while(!q.empty())
{
int U=q.front();
q.pop();
vis[U]=0;
{
int v=no[i].v;
if(dist[v]>dist[U]+no[i].valu)
{
dist[v]=dist[U]+no[i].valu;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
}
void diu(int u)
{
memset(Count,0,sizeof(Count));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(Map[i][j]==0)
continue;
if(dist[j] == dist[i]+Map[i][j])
Count[j]++;
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
cnt=0;
for(int i=1;i<=n;i++)
scanf("%s",str[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
Map[i][j]=str[i][j]-'0';
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(Map[i][j]!=0)
spfa(1);
diu(1);
long long ans=1;
for(int i=2;i<=n;i++)
ans=(ans*Count[i])%mod;
printf("%lld\n",ans);
}
return 0;
}

06-07 2144

06-04 495
06-06 891
09-09 35
06-04 25
07-25 453
07-25 26
06-06 720
12-31 1万+