博主也是刚接触c++没多久的新手小白啦!为了帮助和我一样的集美集帅们更好地理解,我将很详细的介绍每个遇到的知识哦,还有可能疑惑的点和拓展点,建议萌新姐妹哥们儿们认真观看。
AAAAA
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll num(ll a){
return a*a+4*a;
}
int main(){
ll T;
cin>>T;
ll i,j;
for(i=1;i<=T;i++){
ll n;
cin>>n;
ll a[n];
ll sum=0;
for(j=0;j<n;j++){
cin>>a[j];
sum+=num(a[j]);
}
cout<<(sum+10)<<endl;
}
return 0;
}
BBBBB
#include<bits/stdc++.h>
using namespace std;
int main() {
cout << "いいよこいよ" << endl;
return 0;
}
这个题可能有人要问了,这题干这么多条件,直接就这样输出了?这题目不就成摆设了?哈哈哈哈看下面的解释哈。
这个题目还可以用PHP,似乎更加快速便捷,看下面提供的几种PHP代码
是不是没有接触过PHP的小伙伴跟我一样简直目瞪口呆了,好神奇的嘞,哈哈,让我们看看下面的解释。
1.这些代码虽然看起来各不相同,但实际上都在做同样的事情:输出一个字符或者字符串。这些不同的字符或字符串符合题目描述中要求的“符合情景的日文字符串”,因此他们都能够正确通过测试。
2.PHP 代码的语法非常灵活,允许不同的实现方式。只要输出的结果符合题目的要求,即使使用不同的字符或字符串,也能得到正确的答案。题目中没有明确规定输出的具体内容,所以这些不同的输出结果都被判定为正确。
3.PHP 允许通过不同的方式实现输出操作,只要最终输出的内容符合题目要求(即输出一个字符或字符串),无论使用 echo(功能和print一样)
还是 print
,无论输出的是日文字符、字符串还是数字,都会被判定为正确。这就是为什么,不同的 PHP 代码都得到了正确的答案。
CCCCC
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main(){
ll n;
cin >> n;
ll i;
cout<<n<<endl;;
for(i=1;i<=n;i++)
cout<<i<<' ';
return 0;
}
这个题得看清楚,不要真的傻乎乎的就双层循环去判断了,我一开始还想着先给质数分配,然后奇数,偶数不用分配肯定都配对,其实没有那么复杂,让他自己除以自己就行了,这样就能保证配对数最大了。你可能回想着样例一的输出结果也不对啊,题干最后有一句话,排列可能有多种,任选其一输出,所以这个给出的输出样例就是来迷惑没认真读题的小伙伴的,哈哈哈哈哈哈哈哈。
DDDDD
EEEEE
#include<bits/stdc++.h>
#define MAX 100005
using namespace std;
typedef long long int ll;
ll fa[MAX]; // 并查集数组,用于存储每个节点的父节点
ll man[MAX], woman[MAX]; // 分别存储每个集合中男性和女性的数量
// 初始化并查集,每个节点的父节点初始化为自己
void init(ll n) {
for (ll i = 1; i <= n; i++) {
fa[i] = i;///初始时,将其本身作为每个节点的父节点
man[i] = 0;
woman[i] = 0;
}
}
// 查找操作,带路径压缩
ll find(ll i) {
if (i == fa[i])///如果一个节点的父节点就是其本身
return i;
else {
fa[i] = find(fa[i]);///在面对大数据是比递归高效,缩短路径看下面的解释
return fa[i];
}
}
// 合并操作,将两个集合合并
void unionn(ll i, ll j) {
ll i_fa = find(i);
ll j_fa = find(j);
if (i_fa != j_fa) {
fa[i_fa] = j_fa;///将j作为i的父节点
man[j_fa] += man[i_fa]; // 合并后更新男性数量,下面解释有对这两行更新数据代码的解释
woman[j_fa] += woman[i_fa]; // 合并后更新女性数量
}
}
int main() {
ll n, m;
cin >> n >> m;
vector<ll> gender(n+1);
init(n); // 初始化并查集
// 读取性别信息并初始化 man 和 woman 数组
for (ll i = 1; i <= n; i++) {
cin >> gender[i];
if (gender[i] == 1) // 1 代表男性
man[i] = 1;
else // 0 代表女性
woman[i] = 1;
}
ll x, y;
// 读取边并进行合并操作
for (ll i = 0; i < m; i++) {
cin >> x >> y;
unionn(x, y); // 合并两个节点所在的集合
}
// 输出每个节点所在集合中异性别的数量
for (ll i = 1; i <= n; i++) {
ll root = find(i);
if (gender[i] == 1)
cout << woman[root] << endl; // 如果是男性,输出女性数量
else
cout << man[root] << endl; // 如果是女性,输出男性数量
}
return 0;
}
这个题目很容易写超时,是一个典型的并查集算法题目,下面来介绍一下路径压缩和普通递归的区别,还有两行男女数量更新代码的解释。
FFFFF
这个题目吧主要是猜的,这个让我想到了我今年大一下学期在长沙见习时,见习老师和我们课上互动的一个小游戏,用java写了一个猜数字的小游戏,就是用java中利用Random类,基于一个种子,随机生成一个1-100的整数,他当时是这样教我们猜的:先猜最中间的数字 50,如果系统输出“猜大了”,那就往小数猜,25,如果系统说猜小了,那就往大点的数猜,37也就是((50+25)/2.0=37.5),无论怎么猜就往两个数的间值附近猜。不过关于这题我还是去搜了一下资料是这样解释的:
GGGGG
#include <bits/stdc++.h>
#define NUM 1000000007 // 修改宏定义,避免浮点数带来的问题
#define N 1000000 // 修改宏定义,确保是整型常量
using namespace std;
typedef long long ll;
ll jc[N + 1]; // 数组大小为 N+1,确保可以存储到 N 的阶乘
// 快速幂函数,用来计算 a 的 b 次方对 NUM 取模的结果
ll qsm(ll a, ll b) {
ll ans = 1;
a %= NUM;///避免一开始时a的数据比较大造成大数溢出
while (b) {
if (b & 1) {
///二进制中,与1作位运算,b的二进制形式末尾是1,相当于b%2==1,即b是奇数
ans = ans * a % NUM;
///每一步都取模,避免大数溢出,有关逐步取模,我在第一篇博客里有详解
}
a = a * a % NUM;
b >>= 1;///二进制中,b向右移一位,相当于b/=2
}
return ans;
}
// 初始化阶乘数组
void init_jc() {///init_jc(jc[N]) 是错误的
jc[0] = 1;// 初始化阶乘数组,jc[0] = 1 表示 0! = 1。
for (ll i = 1; i <= N; i++) {
jc[i] = i * jc[i - 1] % NUM;
}
}
// 计算组合数 C(n, m)
ll C(ll n, ll m) {
if (m > n) return 0; // 防止无效组合
//运用费马小定理求逆模元,详解在代码下方
return jc[n] * qsm(jc[m], NUM - 2) % NUM * qsm(jc[n - m], NUM - 2) % NUM;
}
void solve() {
int n, m;
cin >> n >> m;
if (n < 3) {
cout << 0 << endl; // 如果 n 小于 3,不能构成有效的桥梁
return;
}
//这步计算详解在代码下方,数学中的排列组合计算
cout << C(m, n - 1) * (n - 2) % NUM * qsm(2, n - 3) % NUM << endl;
}
signed main() {
///signed main(): 主函数,使用 signed 的原因是为了确保整数类型是 long long。
///其实这个与int main()差别不大,下方有详解
ios::sync_with_stdio(0);//这三行(53,54,55)用于加速输入输出操作。
cin.tie(0);
cout.tie(0);
cout << fixed << setprecision(20);//这句话用途下面有详解
init_jc(); // 初始化阶乘数组
int t = 1; // 修改 t 以适应多组测试,如果只需一组测试,保持 t = 1 即可
while (t--) {
solve();
}
}
首先,为什么要用费马小定理?因为我们要求逆元,为什么要求逆元?因为我们要避免大数的除法。
在学组合数的时候我们知道,组合数是这么定义的,由于分子分母的数据都可能很大,所以我们要转化为方便运算的逆元。
但是逆元怎么计算呢?
cout << C(m, n - 1) * (n - 2) % NUM * qsm(2, n - 3) % NUM << endl;这句代码解释如下:
有关signed main()和int main(),signed main()中可以进行输入操作吗?它与int main()有什么区别吗?
cout << fixed << setprecision(20);这句代码有什么作用呢?
将所有接下来输出的浮点数以固定小数点表示法(而不是科学计数法)显示,并且小数点后保留 20 位数值。这可以用于确保输出的数值精度,尤其是在一些需要高精度显示的场景中(例如科学计算、金融计算)。
HHHHH
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"OMG";
return 0;
}
这题挺无语的,我没有多想,图片中的提示使用了一系列表情符号和相关提示。这些表情符号通常与常见的表达惊讶、兴奋或者不敢置信的情绪相关,我第一反应就是Oh My God!(欢迎大家补充猜想原因)。
IIIII
#include <iostream>
#include <string>
using namespace std;
int main() {
cout <<"password"<< endl;
return 0;
}
这个题我没想出来,考试结束后查的答案解析
JJJJJ
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int n, k;
cin >> n >> k;
int all = (n + 1) * (n + 1) / 6;//数学推导出来的公式,详细见下面的解释
if (all >= k)
cout << "yes";
else
{
cout << "no" << '\n';
cout << (long long)sqrt(6 * k - 1);
}
}
signed main()
{
ios::sync_with_stdio(false);//提高输入输出效率
cin.tie(nullptr);
int t = 1;
// cin >> t;
while (t--)
solve();
return 0;
}
KKKKK
哈哈哈细心的小伙伴通过拉动进度条知道,我们没有被放鸽子,言归正传,让我们来看一下这个代码;
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
ios::sync_with_stdio(0); cin.tie(0);
int n; cin>>n;
int fg=1;
int times=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=times;j++) cout<<" ";
cout<<"鸽";
cout<<'\n';
times+=fg;
if(times==-1)
{
fg=1;
times=1;
}
else if(times==27)
{
fg=-1;
times=25;
}
}
}
LLLLL
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main(){
ll n;
cin>>n;
multiset<ll> a;
set<ll> sets;
ll i;
for(i=0;i<n;i++){
ll x;
cin>>x;
a.insert(x);
sets.insert(x);///仅仅为了判断数组元素是否都一样
}
if(sets.size()==1)
cout<<"1";
else{
//找最长的区间的话,直接排除有1,和有两个及以上偶数存在时的情况
cout<<1;
}
return 0;
}
/*#include <iostream>
using namespace std;
int main () {
cout << "1";
return 0;
}*/
这个题我感觉挺无语的,我本来在想,为什么这个题这么简单,一个最长的连续区间,使得区间内数字两两之间不存在共同因子,他也没说第二行输入的a[i]是像1 2 3 4 5 6 7 8 这样的连续序列吧,万一输入的是,4 5 7 9 11 这样的呢,我很不理解为什么答案直接输出1。我查了一下才知道,1是所有数的公共因子,所以最长连续序列只能是1
好啦好啦!终于完成编辑了,谢谢观看,不足之处和缺点欢迎友友们指出,谢谢!(花花)(😊)