2014 day2

第一题,直接暴力。注意边界,可以直接平移矩形

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
const int N=150;
int d,n;
int fl[N*3][N*3];
ll ans[N*3][N*3],max1,ans1;
int main(){
	scanf("%d%d",&d,&n);
	for(int i=1;i<=n;i++){
		int x,y,k;
		scanf("%d%d%d",&x,&y,&k);
		x=x+N,y=y+N;
		fl[x][y]=k;
	}
	for(int i=N;i<=128+N;i++)
	 for(int j=N;j<=128+N;j++)
	 	for(int k=-d;k<=d;k++)
	 	 for(int l=-d;l<=d;l++)
           ans[i][j]+=fl[i+k][j+l];
    for(int i=N;i<=128+N;i++)
	 for(int j=N;j<=128+N;j++){
	   	if(ans[i][j]>max1){
	   	   max1=ans[i][j];
		   ans1=0;	
		}
		if(ans[i][j]==max1){
		   ans1++;	
		}
	}      
	printf("%lld %lld",ans1,max1);
	return 0;
} 

至于第二题           正反向建图,后bfs

#include<iostream> 
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,x,y,s,t,num,sum,f2;
int h[10050],fla[10050],fl[10050];
int q[5000000],zd[10050];
struct edge{
	int next1;
	int to1;
}a[5000000];
void bfs1(int x)
{
	int hhh=1,ttt=1;
	 q[hhh]=x; fla[x]=1;
	 while(hhh<=ttt)
	  {
	  	x=q[hhh];
	  	for(int i=h[x];i>0;i=a[i].next1)
	  	 if(fla[a[i].to1]==0)
	  	 {
	  	 	ttt++;
	  	 	q[ttt]=a[i].to1;
	  	    fla[a[i].to1]=1;
	  	 }
	  	hhh++; 
	  }
}
void bfs2(int x,int y)
{
	memset(q,0,sizeof(q));
	int hd=1,tl=1;
	 q[hd]=x;
	 while(hd<=tl)
	  {
	  	int x1=q[hd];
	  	for(int i=h[x1];i>0;i=a[i].next1)
	  	 {
	  	 	if(fla[a[i].to1]==1)
	  	 	 {
			     tl++;
			   	 q[tl]=a[i].to1;
			   	 zd[tl]=zd[hd]+1;
			   	 if(q[tl]==y){cout<<zd[tl]; f2=1;} 
			   	 fla[q[tl]]=0;
			 }
	  	 }
         hd++;
	  } 
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	 {
	 	cin>>x>>y;
	 	a[i].next1=h[y];
	 	a[i].to1=x;
	 	h[y]=i;
	 }
	 cin>>s>>t;
	 bfs1(t);
	 for(int i=1;i<=n;i++)
	   if(fla[i]==0)
	  	 for(int j=h[i];j>0;j=a[j].next1)
	  	   fl[a[j].to1]=1;
	 for(int i=1;i<=n;i++)
	   if(fla[i]!=0&&fl[i]==1)
	  	 fla[i]=0; 
	 bfs2(t,s);
	 if(f2==0) cout<<"-1";
	
	return 0;
}

第三题 取模思想   注意要有一个好质数!!!!!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int p=2147483647;
char b[100500];
int n,m;
int l[150],r[150],ll,rr,numl[150],numr[150],suml,sumr;
long long ans=0,f[200],anss[1000500];
inline long long zn(int x){
    long long ans=0,sum=1;
    long long lb=strlen(b)-1;
    while(lb>=x){
       ans=(ans+((b[lb]-'0')*sum)%p)%p;
       sum=(sum*10)%p;
       lb--;
    }
    return ans;
}
inline void work(int x){
    if(b[0]=='-') { rr++;numr[rr]=x;r[rr]=zn(1); }
    else  { ll++;numl[ll]=x;l[ll]=zn(0);}
}
int main(){
    //freopen("ccc.in","r",stdin);
    //freopen("ccc.out","w",stdout); 
    scanf("%d%d",&n,&m);
    for(int i=0;i<=n;i++){
        scanf("%s",b);
        work(i);
    }
    for(int i=1;i<=m;i++){
        f[0]=1;suml=0;sumr=0;
      	for(int j=1;j<=n;j++){
      		f[j]=(f[j-1]*i)%p;
        }
        for(int j=1;j<=ll;j++)
         suml=(suml+l[j]*f[numl[j]]%p)%p;
        for(int j=1;j<=rr;j++)
         sumr=(sumr+r[j]*f[numr[j]]%p)%p;
        if((suml%p)==(sumr%p))  ans++,anss[ans]=i;
    } 
    printf("%lld\n",ans);
    for(int i=1;i<=ans;i++)
     printf("%lld\n",anss[i]); 
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42198700/article/details/88244239
今日推荐