J Leaking Roof
#include<bits/stdc++.h>
using namespace std;
const int N=510;
int h[N][N];
double ans[N][N];
struct node{
int x,y,height;
}nd[N*N];
bool cmp(node a,node b){
return a.height>b.height;
}
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int n,m;
bool check(int x,int y){
if(x<=n&&x>=1&&y>=1&&y<=n) return 1;
else return 0;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>h[i][j];
nd[(i-1)*n+j]={i,j,h[i][j]};
ans[i][j]=m;
}
}
sort(nd+1,nd+n*n+1,cmp);
for(int i=1;i<=n*n;i++){
int x=nd[i].x,y=nd[i].y;
int cnt=0;
for(int j=0;j<4;j++){
int nx=x+dx[j];
int ny=y+dy[j];
if(check(nx,ny)&&h[nx][ny]<nd[i].height) cnt++;
}
for(int j=0;j<4;j++){
int nx=x+dx[j];
int ny=y+dy[j];
if(!check(nx,ny)||h[nx][ny]>=nd[i].height) continue;
ans[nx][ny]+=1.0*ans[x][y]/cnt;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(h[i][j]==0) cout<<fixed<<setprecision(6)<<ans[i][j]<<' ';
else cout<<0<<' ';
}
cout<<'\n';
}
return 0;
}
G Limit
#include<bits/stdc++.h>
using namespace std;
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int qpow(int b,int p){
int res=1;
while(p){
if(p&1) res=res*b;
p>>=1;
b=b*b;
}
return res;
}
int main(){
int n,t;
cin>>n>>t;
int ans=0;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
ans+=a[i]*b[i];
}
if(t==0) cout<<0<<'\n';
else if(t==1) cout<<ans<<'\n';
else{
ans=0;
for(int i=1;i<t;i++){
ans=0;
for(int j=1;j<=n;j++)
ans+=a[j]*qpow(b[j],i);
if(ans){
cout<<"infinity\n";
return 0;
}
}
ans=0;
for(int i=1;i<=n;i++){
if(t%2==0) a[i]*=-1;
a[i]*=qpow(b[i],t);
ans+=a[i];
}
int g=__gcd(abs(ans),t);
ans/=g,t/=g;
if(t==1) cout<<ans<<'\n';
else cout<<ans/g<<'/'<<t/g<<'\n';
}
return 0;
}
I Discrete Mathematics

statements
D Linear Algebra

statements