zoukankan      html  css  js  c++  java
  • 瞎搞poj1013

    http://poj.org/problem?id=1013

    题意:给你标记从A到L的石子,其中有一个石子,可能会轻于其它石子,也可能重于其它石子。你只能通过三次天平的测量去找到这个石子。天平的三个状态,even 两边一样重 up左重右轻 down左轻右重

    思路:标记even状态的所有石子,再用一个计数器去记录up和down的石子的出现次数重就加1,轻就减1。(超重或超轻的石子只会有一种状态要么+要么-,其它的石子会因为这个石子的影响有两个状态所以允许+-的抵销)最后你只需要找出出现次数最大的一个石子,如果此时个数为负数那就是light,为正就是heavy

    AC代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
    int t;
    scanf("%d",&t);
    while(t--)
    {
    char a[15],b[15],c[15];
    int vis[15];
    memset(vis,0,sizeof(vis));
    int d[15];
    memset(d,0,sizeof(d));
    for(int i=0; i<3; i++)
    {
    scanf("%s %s %s",a,b,c);
    if(c[0]=='e')
    {
    for(int j=0; a[j]; j++)
    vis[a[j]-'A']=1;
    for(int j=0; b[j]; j++)
    vis[b[j]-'A']=1;
    }
    else if (c[0]=='d')
    {
    for(int j=0; b[j]; j++)
    d[b[j]-'A']++;
    for(int j=0; a[j]; j++)
    d[a[j]-'A']--;
    }
    else
    {
    for(int j=0; a[j]; j++)
    d[a[j]-'A']++;
    for(int j=0; b[j]; j++)
    d[b[j]-'A']--;
    }
    }
    int maxn=0;
    int to=-1;
    for(int i=0;i<12;i++)
    {
    if(vis[i])
    continue;
    if(maxn<=abs(d[i]))
    {
    maxn=abs(d[i]);
    to=i;
    }
    }
    if(d[to]>0)
    printf("%c is the counterfeit coin and it is heavy. ",to+'A');
    else
    printf("%c is the counterfeit coin and it is light. ",to+'A');
    }
    return 0;
    }

  • 相关阅读:
    NoSuchMethodError: Closure call with mismatched arguments:
    pod reopened update慢
    Flutter ListView 不满屏 无法滚动
    三分钟告诉你MBR和GPT的区别,选择适合自己的
    centos8 安装VMware,之后不能启动问题处理
    Docker学习之路
    JavaScript 编程语言
    工具
    Java开发
    Oracle的学习
  • 原文地址:https://www.cnblogs.com/xiejiamin/p/7081743.html
Copyright © 2011-2022 走看看