选拔赛补题
A.级数求和
思路:直接求和再去判断即可
B.P4702 取石子(很好的一道思维题)
思路:其实拿到的时候有点感觉但不多开始模拟,于是我就用 n = 1,a[1,2,3,4]一直开始模拟,我得出了看最后状态的结论,最后用每一次最后的状态推出每个人在奇偶状态的胜率,最后推得Alice在奇数状态下会win,Bob则在偶数状态下会win
#include<iostream>
using namespace std;
const int N = 1e7+10;
int a[N];
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n,sum = 0;cin>>n;for(int i = 1;i <= n;i++){int x;cin>>x;sum += x;//目的是计算总量}if(sum & 1)cout<<"Alice"<<'\n';else cout<<"Bob"<<'\n';return 0;
}
C.P8480 「HGOI-1」PMTD
思路:我服了这题要考虑范围,不开 long long 真的离谱了
就是不需要考虑减法和除法(因为会使得数据减小)考虑加法和乘法即可,小学都知道,乘一个比1小的数,新得的数会比原来的数更小;因此可以得出特判条件!!
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
const int N = 1e7+10;
ll a[N];
int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ll n,m;cin>>n>>m;for(ll i = 1;i <= n;i++){cin>>a[i];}sort(a+1,a+1+n);while(m--){if(a[n] <= 1)a[n] += 2;else a[n] *= 2;}cout<<a[n] - a[1]<<'\n';return 0;
}
D.P1150 Peter 的烟
思路:又是抽象的一题,我是用cnt和sum分别记录能换多少个和一共能得到多少个
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{int n,k,cnt = 0,sum = 0;cin>>n>>k;cnt = n;sum = n;while(cnt >= k){cnt -= k;//能换多少个sum ++;//把换掉的重新累加上cnt ++;//继续累加换掉的瓶子}cout<<sum<<'\n';return 0;
}