C小白第一天训练,有哪些细节需要注意?
摘要:C++小白训练第一天 以下为牛客挑战 今日收获 b1=(t<=0?0:(t+B-1)B); (t+B-1)B,这个就是向上取整,c&#
C++小白训练第一天
以下为牛客挑战
今日收获
b1=(t<=0?0:(t+B-1)/B);
(t+B-1)/B,这个就是向上取整,c++默认是向下取整
三目运运算符和向上取整 比较?运算1:运算2;
一个数&1就可以判断他的奇偶数性,奇数为1,偶数为0;
find(t.begin(),t.end(),x),去容器中找x,find(...) != t.end()这样就是没有找到
连续段的题目直接可以用两个参数代替,now,ans,
牛客挑战赛85
剑客花木兰
「SFCOI-4」剑客花木兰
输入
4 5 3
1
7
15
101
输出
0 1
1 1
0 5
1 32
输入
2 5 5
3
20
输出
0 1
0 4
开始看到这个题目我没有特别去注意这个10的3次方的问题,然后就在想别的方法去,但是好像都过不了然后我看到10的3次方双层循环不会出事然后直接吗枚举
主要思路就是我们枚举A的次数,来得到B的次数,对体力的和进行比较看看和前一次的大小然后交换次数。,但是这个比较值最少要开到1e12来不然就会全部过不了。
解题代码
#include<bits/stdc++.h>
#define int long long
#define lll __uint128_t
#define PII pair<int ,int>
#define endl '\n'
using namespace std;
#define yn(ans) printf("%s\n", (ans)?"Yes":"No");//快速打印
#define YN(ans) printf("%s\n", (ans)?"YES":"NO");
#define REP(i, e) for (int i = 0; i < (e); ++i)
#define REP1(i, s, e) for (int i = (s); i <=(e); ++i)
#define TESTS int t; cin >> t; while (t--)
#define TEST
const int N=2e5+10,M=1e3+10,mod=1e9+7;
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,A,B;
cin>>n>>A>>B;
for(int i=0;i<n;i++){
int x;
cin>>x;
int max1=1e12;
int a,b;
for(int j=0;j<=A;j++){
int t=x-j*A;
int b1=(t<=0?0:(t+B-1)/B);//因为要填补完全,例如5生命,但是中有3,所以要补充就是向上取整,然后3 和3向上取整还是1;
int f=j*A+b1*B;
if(f<max1){
max1=f;
a=j;
b=b1;
}
}
cout<<a<<" "<<b<<endl;
}
return 0;
}
序列与变换
B-「SFCOI-4」序列与变换_牛客挑战赛85
输入
3 6
20 17 24
输出
1 1
我的第一开始的思路是肯定要求出这个数的等差数列和s然后最少就可以排除一部分数据,然后剩下的我们发现到和s的奇偶性有点相同,
相同的为0,因为
把 aᵢ 一口气减掉总和
s = m+(m−1)+…+0 = m(m+1)/2
得到余量
r = aᵢ − s
因为 s 已经把“后面所有减法”一次性做完,所以 r 就是“减到最后还剩下的那个数”。
而“减偶数”不会翻转最低位,“减奇数”才会翻转最低位。
