2024/9/14:
考点:暴力
#include <bits/stdc++.h>
#define ll long long
using namespace std;
/*
问题描述
一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位)上的数字是奇
数,偶数位 (十位、千位、十万位) 上的数字是偶数,我们就称之为"好数"。
给定一个正整数N,请计算从1到N一共有多少个好数。
*/
bool judge(ll num);
int ans=0;
int main() {
ll N;
cin>>N;
for(ll i=1; i<=N; i++) {
if(judge(i)) {
ans++;
}
}
cout<<ans;
return 0;
}
bool judge(ll num) {
int cnt=0;
while(num>0) {
if(cnt%2==0 && num%10%2==0) {
return false;
} else {
num/=10;
cnt++;
}
if(cnt%2==1 && num%10%2==1) {
return false;
} else {
num/=10;
cnt++;
}
}
return true;
}
2024/9/15:
考点:高精度,模拟,高精度*低精度乘法
1、暴力骗分(50%的得分)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int n;
double d;
cin>>n>>d;
double ans;
ans=round(ans=d*pow(2,n));
printf("%.0lf", ans);
return 0;
}
2、标准解法
#include <bits/stdc++.h>
#define ll long long
#define N 2010
using namespace std;
string s;
int a[N];
int main()
{
int n;
cin>>n>>s;
reverse(s.begin(), s.end());
int pos=s.find(".");
s.erase(pos, 1);
int len=s.size();
for(int i=0; i<len; i++) {
a[i+1]=s[i]-'0';
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=len; j++) {
a[j]*=2;
}
for(int j=1; j<=len; j++) {
if(a[j]>=10) {
a[j+1]++;
a[j]%=10;
if(j==len) {
len++;
}
}
}
}
if(a[pos]>=5) {
a[pos+1]++;
}
for(int i=len; i>=pos+1; i--) {
cout<<a[i];
}
return 0;
}
2024/9/16:
考点:并查集
#include <bits/stdc++.h>
#define ll long long
const int N=1e6+10;
using namespace std;
ll fa[N], size[N], pre[N];
void init() {
//初始化father数组
for(int i=0; i<N; i++) {
fa[i]=i;
}
}
int find(int i) {
if(fa[i]==i) {
//i的根找到,返回其根的序号
return i;
}
return fa[i]=find(fa[i]);//否则就递归直到找到根
}
bool isSameRoot(int x, int y) {
return find(x)==find(y);
}
void union_(int x, int y) {
//合并两个集合
if(!isSameRoot(x, y)) {
//x所在的集合的根改为y集合所在的根
fa[find(x)]=find(y);
}
}
int main()
{
ll m, n, k;
cin>>m>>n>>k;
init();
while(k--) {
int a, b;
cin>>a>>b;
union_(a, b);
}
int ans=0;//连通分量
//for遍历查看一共有几个不同的分量
for(int i=0; i<m*n; i++) {
if(find(i)==i) {
ans++;
}
}
cout<<ans;
return 0;
}