T1
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 1005
int n,m,x,y,z,a[MAXN][MAXN],tot;
int ny,nx;
bool flag=0;
int main(){
freopen("calc.in","r",stdin);
freopen("calc.out","w",stdin);
scanf("%d%d%d%d%d",&m,&n,&ny,&nx,&z);
tot=a[0][0]=1;
while(tot<m*n){
while(y+1<m&&!a[x][y+1]){
a[x][++y]=++tot;
if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }
}
if(flag) break;
while(x+1<n&&!a[x+1][y]){
a[++x][y]=++tot;
if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }
}
if(flag) break;
while(y-1>=0&&!a[x][y-1]){
a[x][--y]=++tot;
if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }
}
if(flag) break;
while(x-1>=0&&!a[x-1][y]){
a[--x][y]=++tot;
if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }
}
if(flag) break;
}
printf("%d %d\n",y,x);
fclose(stdin);fclose(stdout);
return 0;
}
T1,因为calc.out哪里写成了stdin完美爆零,本来预计160的成绩就只有90分了。。。
T2
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 100005
inline void read(int &x){
x=0; int f=1; char c=getchar();
while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); }
while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } x*=f;
}
int Max,Min,a[MAXN];
long long ans[MAXN];
int main(){
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
int T,n;
read(T);
while(T--){
memset(ans,0,sizeof ans );
read(n);
for(int i=1;i<=n;++i) read(a[i]);
for(int i=1;i<=n;++i){
Max=a[i],Min=a[i];
for(int j=i;j<=n;++j){
Max=max(Max,a[j]);
Min=min(Min,a[j]);
++ans[Max-Min];
}
}
for(register int i=0;i<=n-1;++i)
printf("%lld\n",ans[i]),ans[i+1]+=ans[i];
}
fclose(stdin);fclose(stdout);
return 0;
}
T3
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
int front[1000010],to[1000010],nextt[1000010];
bool vis[1000010];
bool ed[1000010];
int tot,n,m,k,res;
vector<int>ans;
void add(int u,int v) {
to[++tot]=v;
nextt[tot]=front[u];
front[u]=tot;
}
void dfs(int now) {
if(now>ans.size()) {
res++;
return;
}
int u=ans[now-1];
for(int i=front[u]; i; i=nextt[i]) {
if(!vis[to[i]]) {
vis[to[i]]=1;
dfs(now+1);
vis[to[i]]=0;
}
}
return;
}
int main() {
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
int t;
scanf("%d",&t);
while(t--) {
bool flag=false;
res=0;
ans.clear();
memset(front,0,sizeof(front));
memset(vis,0,sizeof(vis));
memset(ed,0,sizeof(ed));
scanf("%d%d%d",&n,&m,&k);
for(int i=1; i<=m; i++) {
int x,y;
scanf("%d%d",&x,&y);
if(abs(y-x)>k) {
flag=true;
break;
}
add(x,n+y);
ed[x]=1;
vis[n+y]=1;
}
if(flag) {
printf("0\n");
continue;
}
for(int i=1; i<=n; i++)
if(!ed[i]) ans.push_back(i);
for(int i=0; i<ans.size(); i++) {
int mn=max(1,ans[i]-k);
int mx=min(n,ans[i]+k);
for(int j=mn; j<=mx; j++)
add(ans[i],n+j);
}
dfs(1);
printf("%d\n",res);
}
fclose(stdin);fclose(stdout);
return 0;
}