codeforces gym 101350

题目链接:http://codeforces.com/gym/101350

 

C - Cheap Kangaroo

最大公因数(gcd)

cin/cout会tle

long long型输入输出用%ld会wa,要用%I64d

#include<bits/stdc++.h>
using namespace std;
#define ll long long

ll x[100005];

ll gcd(ll a,ll b){
	if(b==0) return a;
	return gcd(b,a%b);
}

int main(){
	int T,n;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		ll sum=0,ans=0;
		for(int i=0;i<n;i++){
			scanf("%I64d",&x[i]);
			if(i==0) ans=x[i];
			else ans=gcd(x[i],ans);
			sum+=x[i];
		}
		printf("%I64d %I64d\n",sum,ans);
	}
	return 0;
}

 

M - Make Cents?

用map<string,double>就好,注意的是cin/cout会tle,所以输入用字符型数组,再将字符型数组中的内容转存到string中

#include<bits/stdc++.h>
using namespace std;
#define ll long long

map<string,double>Map;

int main(){
	int t,C,N;
	scanf("%d",&t);
	while(t--){
		double t=0;
		Map["JD"]=1.0;
		scanf("%d%d",&C,&N);
		for(int i=0;i<C;i++){
			string s;
			char tmp[15];
			scanf("%s",tmp);
			scanf("%lf",&t);
			int len=strlen(tmp);
			for(int j=0;j<len;j++) s+=tmp[j];
			Map[s]=t;
		}		
		double ans=0.0;
		for(int i=0;i<N;i++){
			string s;
			char tmp[15];
			scanf("%lf",&t);
			scanf("%s",tmp);
			int len=strlen(tmp);
			for(int j=0;j<len;j++) s+=tmp[j];
			ans+=Map[s]*t;
		}
		printf("%.6lf\n",ans);
	}
	return 0;
}

 

I - Mirrored String II

子串,直接暴力

#include<bits/stdc++.h>
using namespace std;
char s[1005];

map<char,bool>Map;
void init(){
	Map.clear();
	char tmp[15];
	strcpy(tmp,"AHIMOTUVWXY");
	int len=strlen(tmp);
	for(int i=0;i<len;i++){
		Map[tmp[i]]=true;
	}
}

int judge(char A[],int n){
	int t;
	if(n%2==0) t=n/2;
	else t=n/2+1;
	int cnt=0;
	for(int i=0;i<t;i++){
		if(A[i]==A[n-i-1]){
			if(i!=n-i-1) cnt+=2;
			else cnt++;
		} 
		else return -1;
	}
	return cnt;
}

int main(){
	init();
	int T;
	scanf("%d",&T);
	while(T--){
		memset(s,0,sizeof s);
		scanf("%s",s);
		int n=strlen(s);
		int ans=0;
		for(int i=0;i<n;i++){
			if(Map[s[i]]==true){
				char tmp[1000];
				int k=0; 
				for(int j=i;j<n;j++){
				    if(Map[s[j]]==false) break;
					else tmp[k++]=s[j],tmp[k]=0;
					int hh=judge(tmp,k);
					//cout<<i<<" "<<j<<" "<<tmp<<"  "<<k<<" "<<hh<<endl;
				    ans=max(ans,hh);
				    
				}
			}
		}
		printf("%d\n",ans);
	}
	return 0; 
}

 

K - Owl Geeks

(看了好久才看懂题意=.=)将每一个y中出现次数最多的数字计数+1,最终答案输出计数最多同时最小的数字,暴力

#include<bits/stdc++.h>
using namespace std;

int cntt[100005],cnt[10];

int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		memset(cntt,0,sizeof cntt);
		int a,b,n;
		scanf("%d%d%d",&a,&b,&n);
		if(a+b>n){
			printf("-1\n");
	    	continue;
		}
		int mx;
		for(int x=1;;x++){
			int y=a*x*x+b*x;
			memset(cnt,0,sizeof cnt);
			mx=0;
			if(y>n) break;
			while(y!=0){
				int t1=y%10;
				cnt[t1]++;
				mx=max(mx,cnt[t1]);
				y/=10;
			}
			for(int i=0;i<=9;i++){
				if(cnt[i]==mx) cntt[i]++;
			}
		}
		int ans=0;
		for(int i=0;i<=9;i++){
			if(cntt[i]>cntt[ans]) ans=i;
		}
		printf("%d\n",ans);
	}
	return 0;
} 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值