UCF Local Programming Contest 2016 通过率前七题

A:签到

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/


int main()
{
	ios::sync_with_stdio(false);
  	cin.tie(0);
  	int t;
	  cin>>t;
	while(t--)
	{
		int a,b,c;
		cin>>a>>b>>c;
		int nm=0;
		if(a>=10)nm++;
		if(b>=10)nm++;
		if(c>=10)nm++;
		cout<<a<<" "<<b<<" "<<c<<endl;
		if(nm==0)cout<<"zilch"<<endl;
		else if(nm==1)cout<<"double"<<endl;
		else if(nm==2)cout<<"double-double"<<endl;
		else cout<<"triple-double"<<endl;
		cout<<endl;
	 } 
	return 0;
}

B:模拟

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/

map<char,char>mp;
int main()
{
  	int t;
	  cin>>t;
	for(int ca=1;ca<=t;ca++)
	{
		mp.clear();
		int n;
		char a[3],b[3];
		scanf("%d",&n);
		for(int i=1;i<=n;i++)scanf("%s%s",a,b),mp[a[0]]=b[0],mp[b[0]]=a[0];
		int q;
		scanf("%d",&q);
		printf("Test case #%d:\n",ca);
		while(q--)
		{
			char s[100];
			scanf("%s",s);
			bool f=true;int len=strlen(s);
			for(int i=0;i<len;i++)
			{
				if(s[i]==s[len-i-1]||mp[s[i]]==s[len-i-1])continue;
				else {
					f=false;
					break;
				}
			}
			printf("%s ",s);
			if(f)puts("YES");
			else puts("NO");
		}
		puts("");
	} 
	return 0;
}

C:DFS判一下即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
int vx[55],vy[55];
int a[55][55];
int n;
void dfs(int x,int y)
{
	if(x<1||y<1||x>n||y>n)return ;
	if(a[x][y]==0)return ;
	if(vx[x]==1&&vy[y]==1)
	{
		a[x][y]=1;//x,y被敲掉 
		dfs(x+1,y);
		dfs(x-1,y);
		dfs(x,y+1);
		dfs(x,y-1);
	}
}
int main()
{
  	int t,q,x,y;
	cin>>t;
	for(int ca=1;ca<=t;ca++)
	{
		scanf("%d%d",&n,&q);
		memset(a,0,sizeof(a));
		memset(vx,0,sizeof(vx));
		memset(vy,0,sizeof(vy));
		int nm=0;
		while(q--)
		{
			scanf("%d%d",&x,&y);
			if(vx[x]&&vy[y])//x行,y列都不是完整的
				nm++;
			else vx[x]=1,vy[y]=1,dfs(x,y); 
		}
		printf("Strategy #%d: %d\n\n",ca,nm);
	} 
	return 0;
}

D:注意女儿在听完她喜欢的歌刚好走是不会重复播放的

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/

ll a[M];
int main()
{
	int t;
	scanf("%d",&t);
	for(int ca=1;ca<=t;ca++)
	{
		int n,k;
		scanf("%d%d",&n,&k);
		ll sm=0;
		for(int i=1;i<=n;i++)
		{
			scanf("%lld",&a[i]);
			sm+=a[i];
		}
		int q;
		scanf("%d",&q);
		printf("CD #%d:\n",ca);
		while(q--)
		{
			int z;
			scanf("%d",&z);
			ll ans=0,lst=0;
			for(int i=1;i<=z;i++)
			{
				ll x;
				scanf("%lld",&x);
				if(i&1)ans+=x,lst=x;
				else
				{
					if(sm==0)continue;
					ll tp=lst%a[k];
					if(tp==0)tp+=a[k];
					x+=tp;
					//cout<<"-----  "<<a[i]<<" "<<sm<<endl;
					ans-=tp;
					ans+=x/sm*a[k];
					x%=sm;
					ans+=min(a[k],x);
				}
			}
			if(a[k]==0)ans=0;
			printf("%lld\n",ans);
		}
		puts("");
	}
	return 0;
}

E:模拟暴力就行

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/

char s[110][110];
int main()
{
  	int t;
  	cin>>t;
  	for(int ca=1;ca<=t;ca++)
  	{
  		int n,m;
  		scanf("%d%d",&n,&m);
  		for(int i=1;i<=n;i++)scanf("%s",s[i]+1);
  		int q;
  		scanf("%d",&q);
  		printf("Word search puzzle #%d:\n",ca);
  		while(q--)
  		{
  			scanf("%s",s[0]);
  			int len=strlen(s[0]);
  			bool f=false;
  			for(int j=1;j<=n;j++)
  			for(int k=1;k<=m;k++)
  			{
  				if(f)break;
  				int a=0,b=0,c=0,d=0;//上下左右 
  				if(s[j][k]==s[0][0])
  				{
  					a=b=c=d=1;
  					for(int l=0;l<len;l++)
  					{
  						if(s[j-l%n<=0?n+j-l%n:j-l%n][k]!=s[0][l])a=0;
  						if(s[j+l%n>=n+1?j+l%n-n:j+l%n][k]!=s[0][l])b=0;
  						if(s[j][k-l%m<=0?m+k-l%m:k-l%m]!=s[0][l])c=0;
  						if(s[j][k+l%m>=m+1?k+l%m-m:k+l%m]!=s[0][l])d=0;
					}
				}
				f=true;
				if(a)printf("U %d %d %s\n",j,k,s[0]);
				else if(b)printf("D %d %d %s\n",j,k,s[0]);
				else if(c)printf("L %d %d %s\n",j,k,s[0]);
				else if(d)printf("R %d %d %s\n",j,k,s[0]);
				else f=false;
			}
		}
		puts("");
	}
	return 0;
}

F:N^2枚举AB,ON找CM

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const double eps=1e-6;
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
struct point{
	double x,y;
}p[110];
bool cp(double a,double b)
{
	if(fabs(a-b)<=eps)return 1;
	return 0;
}
double dis(point p1,point p2){
	return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
#define zero(x) (((x)>0?(x):-(x))<eps)
int perpendicular(point u1,point u2,point v1,point v2){
	return zero((u1.x-u2.x)*(v1.x-v2.x)+(u1.y-u2.y)*(v1.y-v2.y));
}
int main()
{
  	int t;
	cin>>t;
	for(int ca=1;ca<=t;ca++)
	{
		int n,nm=0;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
		for(int i=1;i<=n;i++)
		for(int j=i+1;j<=n;j++)
		{
			point md=point{(p[i].x+p[j].x)/2,(p[i].y+p[j].y)/2};
			double len=dis(p[i],p[j]);
			bool f=false;
			int tp=0;
			for(int k=1;k<=n;k++)
			{
				if(i==k||j==k)continue;
				if(cp(md.x,p[k].x)&&cp(md.y,p[k].y))f=true;
				//cout<<i<<"  "<<j<<"  "<<f<<"  "<<endl; 
				if(cp(dis(p[k],md),len))
				{
					if(perpendicular(md,p[k],p[i],p[j]))
						tp++;
				}
			}
			if(f)nm+=tp;
		}
		printf("Set #%d: %d\n\n",ca,nm);
	} 
	return 0;
}

H:枚举除数i,j  ,剪枝后到可行复杂度

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const double eps=1e-6;
const int M = 1e7+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
int a[M];
int main()
{
  	int t;
	cin>>t;
	for(int ca=1;ca<=t;ca++)
	{
		ll ans=0;
		int n ,x,mx=0;
		scanf("%d",&n);	
		memset(a,0,sizeof(a));
		for(int i=1;i<=n;i++)scanf("%d",&x),a[x]++,mx=max(mx,x);
		int sz=mx;
		ans+=(ll)a[0]*(n-a[0])+(ll)a[1]*(n-a[0]-a[1]);//先把0,1算出来,省一点时间 
		for(int i=2;i<=sz;i++)
		{
			if(a[i])//剪枝后最坏情况是: sz*loglogsz 
				for(int j=2;j<=sz/i;j++)
					ans+=(ll)a[i]*a[j*i];
		}
		printf("Test case #%d: %lld\n\n",ca,ans);
	} 
	return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值