77

三角形问题
 给你一个由无穷个节点组成的三角形(如下图),你的任务很简单——任意给你两个正整数x和y,判断它们是否相邻(重合不是相邻)。
                                                                               

Input

第一行T,表示T组测试数据,接下来仅有两个32位正整数x 和y。

Output

对于每组测试数据,首先输出”Case k:”,其中k表示第几组。然后如果x和y相邻,则输出“Yes”,否则输出“No”。

Sample Input

31 11 21 11

Sample Output

Case 1:No
Case 2:Yes
Case 3:No 
code1: 将三角形右边的数存起来,在判断x的位置时,使x<=a[i]
三种位置 1.右边 2.左边3.中间
<div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;">#include<iostream></span></div><span style="font-size: 10px;">#include<stdio.h>
</span><div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;">>
#include<math.h>
</span></div>#include<algorith
musing namespace std;
int a[35000];
<div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;"> i=2;i<350</span></div>void ini()
{
    a[1]=1;
    for(in
t00; i++)
    {
        a[i]=a[i-1]+i;
    }
}
<div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;">int i,t,k=</span></div>int main()
{
    //int a[1]=1;
    ini();
   
 0,b,aa;
    scanf("%d",&t);
    while(t--)
    {
<div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;"> printf("Cas</span></div>        k++;
        scanf("%d%d",&aa,&b);
      
 e %d:",k);
        for(i=1;i<=aa;i++)
        {
<div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;">   break;
        }
        if(aa==</span></div>            if(aa<=a[i]&&aa>a[i-1])
            
 a[i])
        {
            if(b==aa-1||b==a[i-1]||b==aa+i||b==aa+i+1)
<div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;">("No\n");
        }
        else</span></div>                printf("Yes\n");
            else
                print
f if(aa==a[i-1]+1)
        {
            if(b==aa+1||b==aa-i+1||b==aa+i+1||b==aa+i)
<div style="text-align: left;"><span style="font-size: 10px; font-family: Arial, Helvetica, sans-serif;">      }
        else
        {
 </span></div>                printf("Yes\n");
            else
                printf("No\n");
 
            if(aa-b==i-1||aa-b==i||b-aa==i||b-aa==i+1||aa-b==1||b-aa==1)
            printf("Yes\n");
<div style="text-align: left;"></div>            else
            printf("No\n");
        }
    }
    return 0;
<div style="text-align: left;"></div>}
code2: 用二位数组模拟三角形 将x与左边的数比较
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include <stdio.h></span></div><div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include <string.h></span></div>#include <stdlib.h>
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include <algorithm</span></div>#include <iostream>
>
#include <queue>
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">_int64 k=2,str[4</span></div>#include <stack>
using namespace std;

_00][400];
int main()
{
    memset(str,0,sizeof(str));
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">{
        for(__</span></div>    str[1][1]=1;
    for(__int64 i=2; i<=400; i++)
   
 int64 j=1; j<=i; j++)
        {
            str[i][j]=k;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">("%d",&n);
    w</span></div>            k++;
        }
    }
    int n,ll=0;
    scan
fhile(n--)
    {
        __int64 i,x,y,j;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">  for( i=1;; i++)
        {
       </span></div>        scanf("%I64d %I64d",&x,&y);
     
      if(str[i][1]>x)
                break;
        }
        i=i-1;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">    break;
        ll++;
   </span></div>        for( j=1; j<=i; j++)
            if(str[i][j]==x)
           
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">      if(str[i][j-1]==y||str[i][j+1]==y||str[i-1][j-1]==y||str[i-1][j]==y||str[i+1][j]==y||str[i+1][j+1]==y)</span></div>        {
            printf("Case %d:Yes\n",ll);
        }
        else
<div style="text-align: left;"></div>            printf("Case %d:No\n",ll);
    }
    return 0;
<div style="text-align: left;"></div>}
排火车
某天,Apple问起Gaga,”扑克牌排火车有没有玩过??”,”没有-_-“。Apple感到很不可思议,他决定马上教Gaga玩这个游戏。碍于手头上没有扑克牌,Apple就剪了几张卡片,然后在卡片上写上数字,然后对Gaga说“简单来讲,就是你有一堆牌,我有一堆牌,我们轮流出,每次把牌叠在上一次出的牌的下方,如果这时发现当前的牌与前面的牌有重复,那么这之间的牌就都归你了。这样到最后谁没有牌,谁就输了。”“oh,原来如此”。Gaga觉得这个也不过如此。

于是他们开始玩排火车了。。。

现在假设Apple和Gaga各有N张牌,Apple先出牌。请你给出一轮下来Apple和Gaga各获得的牌数。

Input

第一行T,表示T组测试数据,接下来有T部分。

每部分开头是一个整数N(1 <= N <= 50000),表示Apple和Gaga的牌数。接下来有2行,给出Apple和Gaga的牌的情况。首先给出Apple的牌,有N个整数,第i个整数xi(1 <= xi <= 100000)表示Apple的第i张牌面。其次给出Gaga的牌,格式类似。

Output

对于每组测试数据,首先输出”Case k:”,其中k表示第几组。然后输出 Apple和Gaga这一轮获得的牌数。

Sample Input

331 2 31 2 341 4 6 82 5 9 1035 5 56 6 6

Sample Output

Case 1:Apple:0 Gaga:6
Case 2:Apple:0 Gaga:0
Case 3:Apple:3 Gaga:3 

code模拟 将A . G的牌按照出牌的顺序存放在数组里 再用stack 模拟
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include<stdio.h></span></div><div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include<iostream></span></div>#include<string.h>
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">ng namespace st</span></div>#include<stack>
us
id;
int a[101000],flag[101000];
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">   int t,n</span></div>int main()
{
    stack<int>ss;

 ,k=0,i,j,ans1,ans2,tem=0;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">le(t--)
    {
     </span></div>    scanf("%d",&t);
    wh
i   k++;
        printf("Case %d:",k);
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">g,0,sizeof(flag));
 </span></div>        ans1=ans2=0;
        memset(fl
a       scanf("%d",&n);
        for(i=0;i<n;i++)
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">i<n;i++)
            scanf("%d",</span></div>            scanf("%d",&a[i*2]);
        for(i=0
;&a[i*2+1]);
        for(i=0;i<2*n;i++)
        {
            if(flag[a[i]]==0)
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">       }
    </span></div>            {
                flag[a[i]]=1;
                ss.push(a[i]);
    
         else
            {
                while(ss.top()!=a[i])
                {
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;"> ss.pop();
                }
        </span></div>                    flag[ss.top()]=0;
                    tem++;
                  
         ss.pop();
                tem+=2;
                flag[a[i]]=0;
                if(i%2==0)
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">em=0;
            }
        }
</span></div>                    ans1+=tem;
                else
                    ans2+=tem;
                
t        printf("Apple:%d Gaga:%d\n",ans1,ans2);
    }
    return 0;
<div style="text-align: left;"></div>}
code:用数组代替stack模拟
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include <iostream></span></div>#include <stdio.h>
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">

using namespace s</span></div>#include <string.h
>td;

int h[100010],x[50010],y[50010];
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">T,Case=0;
    sc</span></div>bool hx[100010];

int main()
{
    int
 anf("%d",&T);
    while (T--)
    {
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">  memset(hx,0,sizeof(hx));
   </span></div>        int N,A=0,G=0,t=0,m,z;
     
      scanf("%d",&N);
        for (int i=0; i<N; i++)
        {
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;"><N; i++)
        {
           </span></div>            scanf("%d",&x[i]);
        }
        for (int i=0; 
i scanf("%d",&y[i]);
        }

        for (int i=0; i<2*N; i++)
        {
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;"> if (hx[x[z]]==0)
     </span></div>            if (i%2==0)
            {
                z=i/2;
              
            {
                    hx[x[z]]=1;
                    h[t++]=x[z];
                }
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">         {
         </span></div>                else
                {
                    for (int j=t-1; j>=0; j--)
          
                if (h[j]==x[z])
                        {
                            hx[h[j]]=0;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">                    else hx[h[j]</span></div>                            m=j;
                            break;
                        }
   
 ]=0;
                    }
                    A=A+t-m+1;
                    t=m;
                }
            }
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">         hx[y[z]</span></div>            else
            {
                z=i/2;
                if (hx[y[z]]==0)
                {
          
 ]=1;
                    h[t++]=y[z];
                }
                else
                {
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">(h[j]==y[z])
                        {
       </span></div>                    for (int j=t-1; j>=0; j--)
                    {
                        if
                      hx[h[j]]=0;
                            m=j;
                            break;
                        }
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">       }
            }
        }
       </span></div>                        else hx[h[j]]=0;
                    }
                    G=G+t-m+1;
                    t=m;
        
  printf("Case %d:Apple:%d Gaga:%d\n",++Case,A,G);
    }
    return 0;
<div style="text-align: left;"></div>}
三角形问题II
给定平面上的N 个点的坐标,现在你的任务是统计任意3个点构成的三角形的面积和的值。

Input

有多组数据

数据的第一行包含一个正整数T表示数据组数(1 <= T <= 100) 接下来T组数据。

对于每组数据,

第一行包含一个正整数N,代表平面上点的个数 。(1<= N <= 50,)

接下来N行,每行包含2个实数Xi, Yi,代表第i个点的坐标 (0.00 <= Xi,Yi <= 100.00小数点后至多2位)

数据不保证不会出现坐标相同的点。

Output

对于每组数据,首先输出”Case d: “,d为数据编号(从1开始)。只输出一个实数,表示面积和的值。(输出小数点后1位)

Sample Input

130 01 11 0

Sample Output

Case 1: 0.5

Hint

请使用double代替float以避免精度问题。 

code:求出任意三角形构成的面积和
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include <iostream></span></div>#include <cstdio>
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">
#include <cmath>
</span></div>#include <cstring
>
using namespace std;

<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">ouble , double> p</span></div>const int N = 55;
pair<
doint[N];

<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">(pair<double, double> p1, pair<double, double> p2, pair<double, double> p3)
{
    doub</span></div>double are
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">ale ans = (p2.second - p1.second) * (p3.first - p1.first) - (p2.first - p1.first) * (p3.second - p1.second);</span></div>    return fabs(ans / 2.0);
}

int main()
{
    int T, k = 1;
    cin >> T;
    while(T --){
        int n;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">
        }
      </span></div>        cin >> n;
        for(int i = 0; i < n; i ++){
            cin >> point[i].first >> point[i].second
;  double ans = 0.0;
        for(int i =  0; i < n; i ++){
            for(int j = i + 1; j < n; j ++){
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">nt[k]);
                }
            }
        </span></div>                for(int k = j + 1; k < n; k ++){
                    ans += area(point[i], point[j], po
i}
        printf("Case %d: %.1lf\n", k ++, ans);
    }
    return 0;
<div style="text-align: left;"></div>}
code2:
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">#include<stdio.h></span></div>struct node
{
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">;
} nodee[55];
</span></div>    double x,
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">ydouble sol(int i,int j,int k)</span></div>{
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">  double x1=nodee[j].x-nodee[i].x;
 </span></div> 
    double y1=nodee[j].y-nodee[i].y;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">    double y2=nodee[k].y-nodee[i].y;</span></div>    double x2=nodee[k].x-nodee[i].x;
    double ans=x1*y2-x2*y1;
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">2;
}
int main</span></div>    if(ans>0)
        return ans/2;
    else
        return -ans
/()
{
    int i,j,k,n,t,m=0;
    scanf("%d",&t);
    while(t--)
    {
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">r(i=0; i<n; </span></div>        m++;
        double ans1=0;
        scanf("%d",&n);
        f
oi++)
            scanf("%lf%lf",&nodee[i].x,&nodee[i].y);
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">j++)
                for(k=j</span></div>        for(i=0; i<n-2; i++)
            for(j=i+1; j<n-1;
 +1; k<n; k++)
                    ans1=ans1+sol(i,j,k);
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">n 0;
}</span></div>        printf("Case %d: %.1f\n",m,ans1);
    }
    retu
<div style="text-align: left;"><span style="font-family: Arial, Helvetica, sans-serif;">r</span></div>

音乐
code:贪心 每一个唱了多与一首歌曲的歌手 他所产生的fun值都要最大化,一首位于序列头 一首位于序列尾 其余散在中间(无论位子怎样 结果都是唯一的 即 n-1),这样算出一个歌手的之后 减去头尾两手音乐 (n-=2)计算下一尾歌手的音乐 这样可以使结果最大 不信你试试,
#include <iostream>
#include<string.h>
using namespace std;
int a[100],flag[100];
int main()
{
    int t,n,i,ans,k=0,tt;
    cin>>t;
    while(t--)
    {
        k++;ans=0;
        cin>>n;
        int m=n;
        memset(a,0,sizeof(a));
        while(m--)
        {
            cin>>tt;
            a[tt]++;
        }
        m=n;
        for(i=0;i<20;i++)
        {
            if(a[i]>1)
            {
                ans+=(m-1);
                m-=2;
            }
        }
        cout<<"Case "<<k<<":"<<endl;
        cout<<ans<<endl<<endl;
    }
    return 0;
}


 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值