Gym - 100384 Winter Programming School 2014, Kharkov The 23-d of the Fabruary 2014. (day 9), junior

这篇博客详细介绍了2014年Kharkov冬季编程学校第9天的Junior组问题,包括Maximal Difference、Triangle Construction、Beautiful Patterns等题目的题意、解题思路和代码实现。
摘要由CSDN通过智能技术生成

Problem B. Maximal Difference (Junior)

题意:给你一个n,让你找出n位数中各个位数相加相等且差值最大的值。 比如n=2就是91和19,所以答案就是72

题解:直接一个个算出来或者找规律,n=2就是91和19,n=3就是910和109,n=4就是9910和1099。

代码:

#include<cstdio>
int n;
int main(){
    scanf("%d",&n);
    switch(n){
        case 1: printf("0\n");break;
        case 2: printf("72\n");break;
        case 3: printf("801\n");break;
        case 4: printf("8811\n");break;
        case 5: printf("89001\n");break;
        case 6: printf("898101\n");break;
        case 7: printf("8990001\n");break;
        case 8: printf("89981001\n");break;
        case 9: printf("899900001\n");break;
        case 10: printf("8999810001\n");break;
    }
    return 0;
}

Problem D. Triangle Construction (Junior)

题意:给你三角形的三边,若不能成为三角形则输出Impossible ,否则输出三个点的坐标(任意)。

题解:固定两个点在x轴上,然后求出一个角的角度,用三角形正余弦定理就能搞定了= =

代码:

#include<cstdio>
#include<cmath>
const double eps=1e-7;
struct node{
    double x,y;
}e[3];
double a,b,c;
double s;
int main(){
    scanf("%lf%lf%lf",&a,&b,&c);
    if(a+b-c<=eps||a+c-b<=eps||b+c-a<=eps){
        printf("Impossible\n");
        return 0;
    }
    e[0].x=e[0].y=0;
    e[1].x=a;
    e[1].y=0;
    double s=acos((b*b+a*a-c*c)/(double)(2*a*b));
    printf("%lf %lf\n",e[0].x,e[0].y);
    printf("%lf %lf\n",e[1].x,e[1].y);
    printf("%lf %lf\n",a-b*cos(s),b*sin(s));
    return 0;
}

Problem F. Beautiful Patterns (Junior)

题意:给你一个n*m的地板和k块已经知道颜色的单元地板,若是这个地板在所有的2*2的块中都有3个白地板和1个黑地板或3个黑地板和1个白地板,则这个n*m的地板则为beautiful,求有多少种方法能使得这个n*m的地板为beautiful

题解:由于n,m较小,因此我们先枚举第一行的所有情况,最多有1024种情况(要排除不行的,题目给你是白色的,你却用黑色填充这种情况)。然后对于下一行,我们假设第一块是白色或者黑色的可能,然后从第二块开始枚举,就可以得到精确的这一行各块的颜色了,我们用mp[i][j]记录方法到第i行第j种方法的方案数,最后我们会得到这么一个递推公式:mp[i][ss]=(mp[i][ss]+mp[i-1][j])%mod。最后ans=∑mp[n-1][0->2^(m-1)]

代码:

#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll n,m,k,x,y,z,flag,ss;
ll mp[15][1111],mmp[15][15];
ll s[15][15],ans,sa[15];
struct node{
    ll x,y,z;
}e[105];
int main(){
    scanf("%lld%lld%lld",&n,&m,&k);
    for(ll i=0;i<=10;i++)
        for(ll j=0;j<=10;j++)  s[i][j]=-1;
    for(ll i=0;i<k;i++){
        scanf("%lld%lld%
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值