2.25测试复盘

描述

你现在拥有n个数字,你可以删掉其中一个数字剩下的数按照原顺序排列,那么奇数位的数的和与偶数位的数的和是否相等,去掉的数可以是任意一个,问有多少种情况能使之相等。

数据范围

1 <= n <= 2e5
ai <= 1e4

输出

输出有多少种情况能使之相等

思路

昨天做这个题的时候,可能是题目说的不清楚,也可能是我的理解出现差错,就是他删除了一个数之后剩下元素的位置会不会前移,事实是会的。其实这个题也是对奇偶运用的一个考察吧,关键就是你怎处理在删除一个数字之后剩下元素的奇偶性变化。

#include<iostream> 
#include<algorithm>
#include<cstdio>
using namespace std;
int a[200020],b[2],d[2];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
       cin>>a[i];
       b[i%2]+=a[i];//我一开始看到这个~妙啊~  存奇数和偶数和
    }
    int cnt=0;
    for(int i=1;i<=n;i++)//每个元素都可能被删掉,都模拟一遍
    {
       d[(i-1)%2]+=a[i-1];//记录删了之后奇偶性改变后的奇数偶数和
       b[i%2]-=a[i];//在原来的奇偶数和当中删去当前元素
       //可能有人这里看不懂,我当时也看不懂嘻嘻
       //这里的d数组记录的就是删除元素 前面 的奇偶数和,d数组就是删除元素后面的
       //删除元素前移后原本是奇位就变成偶位了所以是b[0]和d[1]这样的搭配
       if(b[0]+d[1]==b[1]+d[0])
  	    cnt++;
    }
 	cout<<cnt<<endl;
}

描述

在得知群主发AC红包发穷之后,有钱的周诗诗决定赞助这一项有趣的活动。所以今天在大家AC之后依然会收到红包,这个红包的费用由美女学霸长腿女神周诗诗独家赞助。周诗诗虽然有钱,但是还是喜欢抢红包,根据她多年的抢红包经验,她总是能抢到一定比例的金额。今天周诗诗打算把钱包里的a元发给大家,根据周诗诗多年抢红包的经验,她总结出每1元她能抢回1/b的钱。毕竟周诗诗是有钱的,每当周诗诗的余额大于等于1元时,她又会把整数部分的钱发出去直到最后她没有足够的钱可以发了,于是她很好奇她到底一共发了多少钱?

输入

输入包含两个整数a和b(1≤a≤1000;2≤b≤1000)

输出

她一共发了多少钱

思路

关键在于题目中的加粗部分,我就是这里没理解对,其实这就是一个简单模拟。
把整数部分的钱发出去,小数部分是自己留着的,可能会凑出一块的,我直接丢掉了。

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
 int a,b;
 while(cin>>a>>b)
 {
  int sum=0;
  double res=a*1.0;//res记录的是我拥有的钱数
  while(res>=1)//只要我还有一块钱我还是会发红包的
  {
         a=(int)res;//每次发整数部分的
         sum+=a;//记录一下我发了多少
         res=res-(double)a+(double)(a/b); //更新钱数,减去发的加上抢的
  } 
  cout<<sum<<endl;
 } 
} 

描述

刘勇学姐寒假想学做饭,今天他决定煮汤,这需要正好 n升水
附近的商店只有两种瓶子— 1-升的瓶子和 2-升的瓶子. 这两种瓶子都有无限多.
第一种瓶子的成本为 a,第二种瓶子的成本为 b
刘勇学姐非常贤惠,他希望花费最少的钱来买正好装下n升水的瓶子
你需要回答q个独立的询问.

输入

第一行有一个整数 q(1≤q≤500) —— 询问的数量.
下面q行为n, a, b (1≤ni≤1e12,1≤ai,bi≤1000) 分别为水的体积,两种瓶子的价格

输出

输出q行,每行一个整数,分别为每一行对应的最小花费

思路

一开始看到什么无限多,价格不同,装满,以为是完全背包呢。
其实就是一个思维题,先看一下两瓶一升水的价格和一瓶两升水哪个更便宜,哪个划算用哪个嘛,但要求一定要装满,所以总水数是奇数时一定要用一瓶一升水。

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        long long n,a,b,ans=0;
        cin>>n>>a>>b;
        if(2*a<b)//如果两瓶一升水比一瓶两升水便宜
            ans=a*n;
        else if(2*a>=b) 
        {
            if(n%2==1)
    		ans=b*(n/2)+a;
            else
   		 ans=b*(n/2);    
        }
        cout<<ans<<endl;
    }
}

剩下的时间原因下次再写

发布了32 篇原创文章 · 获赞 5 · 访问量 868

猜你喜欢

转载自blog.csdn.net/LebronGod/article/details/104512462