您的位置:首页 > 编程语言

[20160320] 刚刚会用的GitHub / WarTime-Project On GitHub / BestCoder Round #76

2016-03-20 09:47 459 查看


GitHub!我来了!!!

对大名鼎鼎的GitHub早有耳闻,但是一直没时间,也主要是没那个需求,所以就一直没去学。昨天经过各种搜索学会了最基本的使用方法。其实要不是最近走路的时间多了估计我也不会这么积极的学Git...

于是我Sign in了许久之前注册的账号,逛了一圈还发现了AlphaGO的代码(惊),https://github.com/alphagov/whitehall,貌似很高大上= = 小心地fork了一下看看...好吧,不是很懂...

在建立了一个练手的项目之后,熟悉了大部分用法,于是删掉了这个临时的项目,不过在PublicActivity里面居然还能看见...

于是!我把从前在各种平台上都没能进行的项目企划: WarTime-Project 搬到了GitHub上来。和我一起完成这个项目的还有几个C++/Java初学者,大家在一起,也算互相学习了。

WarTime-Project On GitHub 地址:https://github.com/Kiritow/WarTime-Project,欢迎前来监督项目进程,欢迎Fork~

BestCoder Round #76

昨晚上的BC据说是“世界上最强大的国家”出的题目,然而并没有什么卵用...

只做出了一道题,剩下的一个多小时一直在想最后一道题(1004),但是一直超时后来也不是特别明白...


DZY Loves Balls

Accepts: 659

Submissions: 1393

Time Limit: 4000/2000 MS (Java/Others)

Memory Limit: 262144/262144 K (Java/Others)

问题描述
DZY喜欢玩球。

他有nn个球,装进一个大盒子里。每个球上面都写着一个整数。

有一天他打算从盒子中挑两个球出来。他先均匀随机地从盒子中挑出一个球,记为AA。他不把AA放回盒子,然后再从盒子中均匀随机地挑出一个球,记为BB。

如果AA上的数字严格大于BB上的数字,那么他就会感到愉悦。

现在告诉你每个球上的数字,请你求出他感到愉悦的概率是多少。

输入描述
第一行tt,表示有tt组数据。

接下来tt组数据。每组数据中,第一行包含一个整数nn,第二行包含nn个用空格隔开的正整数a_ia​i​​,表示球上的数字。

(1\le t\le 300, 2\le n \le 300,1\le a_i \le 3001≤t≤300,2≤n≤300,1≤a​i​​≤300)

输出描述
对于每个数据,输出一个实数答案,保留6位小数。

输入样例
2
3
1 2 3
3
100 100 100

输出样例
0.500000
0.000000


#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

int data[400];

int main()
{
int t;
scanf("%d",&t);
for(int turn=0;turn<t;turn++)
{
int n;
scanf("%d",&n);
memset(data,0,sizeof(int)*400);
int tmp;
for(int i=0;i<n;i++)
{
scanf("%d",&tmp);
data[tmp]++;
}
int cnt=0;
for(int i=0;i<400;i++)
{
if(data[i]>0)
{
int ans=0;
for(int j=0;j<i;j++)
{
if(data[j]>0) ans+=data[j];
}
cnt+=ans*data[i];
}
}
printf("%.6f\n",(double)cnt/(n*(n-1)));
}
return 0;
}


至于1002在网上找到了一个代码...

题目如下:


DZY Loves Partition

Accepts: 154

Submissions: 843

Time Limit: 4000/2000 MS (Java/Others)

Memory Limit: 262144/262144 K (Java/Others)

问题描述
DZY喜欢拆分数字。他想知道能否把nn拆成恰好kk个不重复的正整数之和。

思考了一会儿之后他发现这个题太简单,于是他想要最大化这kk个正整数的乘积。你能帮帮他吗?

由于答案可能很大,请模10^9+710​9​​+7输出。

输入描述
第一行tt,表示有tt组数据。

接下来tt组数据。每组数据包含一行两个正整数n,kn,k。

(1\le t\le 50, 2\le n,k \le 10^91≤t≤50,2≤n,k≤10​9​​)

输出描述
对于每个数据,如果不存在拆分方案,输出-1−1;否则输出最大乘积模10^9 + 710​9​​+7之后的值。

输入样例
4
3 4
3 2
9 3
666666 2

输出样例
-1
2
24
110888111

Hint
第一组数据没有合法拆分方案。
第二组数据方案为3=1+23=1+2,答案为1\times 2 = 21×2=2
第三组数据方案为9=2+3+49=2+3+4,答案为2\times 3 \times 4 = 242×3×4=24。注意9=3+3+39=3+3+3是不合法的拆分方案,因为其中包含了重复数字。
第四组数据方案为666666=333332+333334666666=333332+333334,答案为333332\times 333334= 111110888888333332×333334=111110888888。注意要对10^9 + 710​9​​+7取模后输出,即110888111110888111。


#include <iostream>

#include <cstdio>

#include <cstring>

using namespace std;

typedef long long ll;

const ll MOD = 1e9+7;

const int maxn = 2000100;

ll t,n,k;

int num[maxn];

int main()

{

scanf("%I64d",&t);

while(t--){

scanf("%I64d %I64d",&n,&k);

if(k*(k+1)/2 > n){

printf("-1\n");

continue;

}

n -= k*(k+1)/2;

for(int i=1;i<=k;i++){

num[i] = i;

num[i] += n/k;

}

n%=k;

for(int i=k;i>=1;i--){

if(n==0)

break;

num[i]++;

n--;

}

ll sum = 1;

for(int i=1;i<=k;i++)

sum = sum*num[i]%MOD;

printf("%I64d\n",sum);

}

return 0;

}

至于3、4题AC率极低... 在网上几乎找不到解题代码...(心痛)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: