美团笔试编程题
发布于 2017-09-14 21:10 4758 次浏览 0 赞 来自 笔试面试  

被7整除

有更好的方法,但是总体上差不多

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

#define PB push_back  
#define MP make_pair  
#define SZ(v) ((int)(v).size())  
#define FOR(i,a,b) for(int i=(a);i<(b);++i)  
#define REP(i,n) FOR(i,0,n)  
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)  
#define REPE(i,n) FORE(i,0,n)  
#define FORSZ(i,a,v) FOR(i,a,SZ(v))  
#define REPSZ(i,v) REP(i,SZ(v))  
typedef long long ll;
typedef unsigned long long ull;
#define db double
ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); }

const int MAXN=100008;

int a[MAXN];

int sum[7];
int getlen(int x)
{
	if(x==0)	return 1;
	int ans=0;
	while(x>0)
	{
		x/=10;
		ans++;
	}
	return ans;
}
ll fuck(int x,int y)
{
	ll ans=x; 
	while(y--)
	{
		ans*=10;
	}
	return ans;
}
int main()
{
	int n;
	while(scanf("%d",&n)==1)
	{
		ll ans=0;
		REP(i,n)	scanf("%d",&a[i]);
		REP(i,7)	sum[i]=0;
		REP(i,n)	sum[a[i]%7]++;
		REP(i,n)
		{
			sum[a[i]%7]--;
			REP(j,7)
			{
				int temp=getlen(a[i]);
				ll shit= fuck(j,temp)+a[i];
				if(shit%7==0)
					ans+=sum[j];
			}		
			sum[a[i]%7]++;
		}
		cout<<ans<<endl;
	}
	return 0;
}

关灯游戏

如果一个先手状态能推导出任意一个先手必败状态,则该状态为先手必胜状态

如果一个先手状态不能推到任意一个先手必败状态,则该状态为先手必败状态

0是先手必败,1是先手必胜

然后在前面加数字就可以推了

答案十分坑爹

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

#define PB push_back  
#define MP make_pair  
#define SZ(v) ((int)(v).size())  
#define FOR(i,a,b) for(int i=(a);i<(b);++i)  
#define REP(i,n) FOR(i,0,n)  
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)  
#define REPE(i,n) FORE(i,0,n)  
#define FORSZ(i,a,v) FOR(i,a,SZ(v))  
#define REPSZ(i,v) REP(i,SZ(v))  
typedef long long ll;
typedef unsigned long long ull;
#define db double
#define pi 
ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); }

const int MAXN=100008;
int a[MAXN];
int main()
{
	int n;
	
	while(scanf("%d",&n)==1)
	{
		REP(i,n)	scanf("%d",&a[i]);
		if(a[n-1]==0)	printf("Bob\n");
		else	printf("Alice\n");
	}
	return 0;
}


11 条回复

函数名很个性啊

2017-09-14 21:20

这么多宏定义  。这个题跟玩对对碰一样的,扫描一遍数组,发现1则跟后面最近的0对碰。接下来从0开始扫描,发现最近的1则再开始扫描是否有最近的0.如果完成最后对碰,则bob赢,否则alice赢

2017-09-14 21:25

真的假的啊?九点十分发的?

2017-09-14 21:27

我发现个规律,转化成二进制,如果为二的倍数是B赢,不是二的倍数是A赢,可是写成代码一测试才过了20......

2017-09-14 21:29
1
coder_4PV3SZVG 回复 coder_vENh9oMo

你这不相当于只看了最后一个灯么。。。

2017-09-14 21:33

没毛病第一题答案

public class Main {


public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

int a[] = new int[n];


for (int i = 0; i < n; i++) {

a[i] = scanner.nextInt();


}

if (a[n - 1] == 0) {

System.out.println("Bob");

} else {

System.out.println("Alice");

}

scanner.close();

}

}



2017-09-14 21:34
coder_vENh9oMo 回复 coder_4PV3SZVG

是啊,答案却是就是看最后一个灯,但是我想不通我为什么只有百分之20

2017-09-14 21:36

你的被7整除的通过了多少

2017-09-14 23:02

你的被7整除的通过了多少

2017-09-14 23:02
coder_EERKZNRJ 回复 coder_FBGN8Y45

额,我肯定都过了才发啊

2017-09-19 20:45
coder_EERKZNRJ 回复 coder_okbTK6Tp

真的呀,嘿嘿嘿

2017-09-19 20:46
添加回复
回到顶部