P8598 [蓝桥杯 2013 省 AB] 错误票据
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <bits/stdc++.h> #define endl '\n' #define int long long #define INF 0x3f3f3f3f3f const int N = 1000010 ;using namespace std;int arr[N];signed main () { int N; cin>>N; int idx; while (cin>>arr[++idx]){} sort (arr+1 ,arr+idx+1 ); int ans1,ans2; for (int i = 1 ; i <= idx; i++){ if (arr[i+1 ] - arr[i] == 2 ) ans1 = arr[i]+1 ; if (arr[i+1 ] == arr[i]) ans2 = arr[i]; } cout<<ans1<<' ' <<ans2; return 0 ; }
P8752 [蓝桥杯 2021 省 B2] 特殊年份
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <bits/stdc++.h> #define ll longlong using namespace std;int a[100010 ];int main () { int n = 5 ; string s; int ans = 0 ; for (int i = 0 ; i < n;i++ ){ cin>>s; if (s[0 ] == s[2 ]&& s[3 ] - s[1 ] == 1 ) ans++; } cout<<ans; return 0 ; }
P8753 [蓝桥杯 2021 省 AB2] 小平方
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); int n; cin>>n; int cnt= 0 ; for (int i = 1 ; i<= n-1 ; i++){ int x = i*i; if ((x % n) < n/2.0 ){ cnt++; } } cout<<cnt; return 0 ; }
P8780 [蓝桥杯 2022 省 B] 刷题统计
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); int a,b,n; cin>>a>>b>>n; int sum = 0 ; int cnt = 1 ; while (sum<n){ if (cnt % 7 >=1 && cnt%7 <=5 ) sum+=a; else sum+=b; cnt++; } cout<<cnt-1 ; return 0 ; }
P8706 [蓝桥杯 2020 省 AB1] 解码
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); string s; cin>>s; for (int i = 0 ;i < s.size ();i++){ if (s[i]>='1' && s[i]<='9' ) for (int j = 0 ; j < s[i]-'1' ;j++) cout<<s[i-1 ]; else cout<<s[i]; } return 0 ; }
P8717 [蓝桥杯 2020 省 AB2] 成绩分析
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); int n; int a[N]; cin>>n; for (int i = 0 ;i < n;i++){ cin>>a[i]; } sort (a,a+n); double sum = 0 ; for (int i = 0 ; i < n;i++) sum+= a[i]; double ans = sum/n*1.0 ; cout<<a[n-1 ]<<endl<<a[0 ]<<endl; printf ("%.2lf" ,ans); return 0 ; }
P8711 [蓝桥杯 2020 省 B1] 整除序列
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); int n ; cin>>n; while (n>0 ){ cout<<n<<" " ; n = n>>1 ; } return 0 ; }
P8722 [蓝桥杯 2020 省 AB3] 日期识别
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std; unordered_map<string,int > mp{ {"Jan" ,1 }, {"Feb" ,2 }, {"Mar" ,3 }, {"Apr" ,4 }, {"May" ,5 }, {"Jun" ,6 }, {"Jul" ,7 }, {"Aug" ,8 }, {"Sep" ,9 }, {"Oct" ,10 }, {"Nov" ,11 }, {"Dec" ,12 } }; const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); string s; cin>>s; string s1 = s.substr (0 ,3 ); string s2 = s.substr (3 ); cout<<mp[s1]<<" " ; if (s2[0 ] != '0' ) cout<<s2[0 ]; cout<<s2[1 ]; return 0 ; }
P8680 [蓝桥杯 2019 省 B] 特别数的和
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); int n; int ans = 0 ; cin>>n; for (int i = 1 ;i<=n;i++){ string s = to_string (i); for (int j =0 ; j <s.size ();j++){ if (s[j] == '0' || s[j] =='1' ||s[j] =='2' ||s[j] == '9' ) { ans+=i; break ; } } } cout<<ans; return 0 ; }
P9240 [蓝桥杯 2023 省 B] 冶炼金属
题目
思路 贪心
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;signed main () { ios::sync_with_stdio (0 ); cin.tie (0 ); cout.tie (0 ); int n; cin>>n; int a,b; int ans_min = 0 ,ans_max = 1e9 ; for (int i= 0 ; i< n;i++){ cin>>a>>b; ans_min = max (ans_min,a/(b+1 )+1 ); ans_max = min (ans_max,a/b); } cout<<ans_min<<" " <<ans_max; return 0 ; }
P8597 [蓝桥杯 2013 省 B] 翻硬币
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f3f using namespace std;const int N = 100010 ;int arr[N];signed main () { string a,b; cin>>a>>b; int cnt = 0 ; for (int i = 0 ; i < a.size ();i++){ if (a[i]!=b[i]){ a[i] = a[i] == 'o' ?'*' :'o' ; a[i+1 ] = a[i+1 ] =='o' ?'*' :'o' ; cnt++; } } cout<<cnt; return 0 ; }
P8647 [蓝桥杯 2017 省 AB] 分巧克力
思路 打暴力超时 题干字眼——输出切出的正方形巧克力最大可能的边长 二分答案
对于第 i 块巧克力,当边长为 x 时,可以分出 ⌊(ai_÷_x )×(bi_÷_x )⌋ 块巧克力。
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f3f using namespace std;const int N = 100010 ;int a[N],b[N];int n,k;bool check (int mid) { int cnt =0 ; for (int i = 1 ; i <= n ;i++){ cnt+=(a[i]/mid)*(b[i]/mid); } if (cnt>=k)return true ; else return false ; } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n>>k; for (int i = 1 ; i <= n;i++){ cin>>a[i]>>b[i]; } int l = 0 ; int r = 10010 ; while (l+1 <r){ int mid = (l+r)>>1 ; if (check (mid)) l = mid; else r = mid; } if (check (r)) cout<<r; else cout<<l; return 0 ; }
P8772 [蓝桥杯 2022 省 A] 求和
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f3f using namespace std;const int N = 200010 ;int arr[N],sum[N];int n;int ans;signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n; for (int i = 1 ; i<=n;i++){ cin>>arr[i]; sum[i] = sum[i-1 ] + arr[i]; } for (int i =1 ;i <=n-1 ;i++){ ans += arr[i]*(sum[n]-sum[i]); } cout<<ans; return 0 ; }
P8665 [蓝桥杯 2018 省 A] 航班时间
题目
前置知识
去程时间 =飞行时间 + 时差;回程时间 = 飞行时间 − 时差
由此可知 飞行时间 = (去+回)/ 2
用 scanf 输入前面的时间:
1 scanf ("%d:%d:%d %d:%d:%d" ,&h1,&m1,&s1,&h2,&m2,&s2);
每一行后面不一定有额外的天数。如果有,则中间一定有空格,所以判断下一个字符是否为空格即可。
为方便计算,不妨把时间都转换成以秒为单位 t=86400⋅d+3600⋅h+60⋅m+s
h = ans/3600 min = ans%3600/60 s = ans%60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <bits/stdc++.h> #define endl '\n' #define INF 0x3f3f3f3f3f const int N = 1000010 ;using namespace std;int get () { int h1,m1,s1,h2,m2,s2,day=0 ; scanf ("%d:%d:%d %d:%d:%d" ,&h1,&m1,&s1,&h2,&m2,&s2); if (getchar ()==' ' )scanf ("(+%d)" ,&day); return (day*86400 +h2*3600 +m2*60 +s2)-(h1*3600 +m1*60 +s1); } signed main () { int T; scanf ("%d" ,&T); while (T--) { int ans=(get ()+get ())/2 ; printf ("%02d:%02d:%02d\n" ,ans/3600 ,ans%3600 /60 ,ans%60 ); } return 0 ; }
P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值
题目
思路 模拟
完全二叉树的性质
设深度为 dep ,根节点的深度为 1。则有第 dep 层的节点为 2_dep_,每层开头的节点编号为 2_dep_−1,末尾的节点编号为 2_dep_−1**(以上结论叶子节点除外)。**
注意上面加粗黑体字 第一次没考虑到 错了两个点 叶子节点需要额外特判
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;int arr[N];int n;int dep = 1 ,sum = 0 ,Max = -1 ,a,ans;signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n; for (int i = 1 ; i <= n; i++){ cin>>a; sum+=a; if (i == (1 <<dep)-1 ){ if (sum>Max){ Max = sum; ans = dep; } dep++; sum = 0 ; } } if (sum>Max){ Max = sum; ans = dep; } cout<<ans; return 0 ; }
P9231 [蓝桥杯 2023 省 A] 平方差
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;int arr[N];int n;int f (int x) { if (!x) return 0 ; return (x + 1 ) / 2 ; } int g (int x) { return x / 4 ; } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); int l, r; cin >> l >> r; cout << f (r) - f (l - 1 ) + g (r) - g (l - 1 ); return 0 ; }
P9230 [蓝桥杯 2023 省 A] 填空问题
题目
思路
problem A 填空题 **本地暴力枚举 **
把数字转成字符串去处理
答案为 4430091
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 1e8 ;bool check (string s) { int ans1 = 0 ,ans2 = 0 ; for (int i = 0 ; i < s.size ();i++){ if (i<s.size ()/2 ) ans1 += s[i]-'0' ; else ans2 += s[i]-'0' ; } return ans1 == ans2; } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); string s; int ans = 0 ; for (int i = 1 ; i<= N;i++){ s= to_string (i); if (s.size ()%2 == 1 )continue ; if (check (s)) { ans++; } } cout<<ans; return 0 ; }
problem B DFS 本地暴搜
答案为 4165637
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 1e8 ;int arr[N];int ans;void dfs (int score,int cnt) { if (cnt>30 ||score == 100 ) return ; if (cnt == 30 && score == 70 ) ans++; dfs (score+10 ,cnt+1 ); dfs (0 ,cnt+1 ); } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); dfs (0 ,0 ); cout<<ans; return 0 ; }
P8649 [蓝桥杯 2017 省 B] k 倍区间
题目 题解参考
思路 看到”连续子序列求和”这一要求时,我们果断选择前缀和 解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;int arr[N],sum[N];int n,k;map<int ,int > mp; signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n>>k; int ans = 0 ; mp[0 ] = 1 ; for (int i = 1 ; i<=n;i++){ cin>>arr[i]; sum[i] = (sum[i-1 ]+ arr[i])%k; mp[sum[i]]++; } for (int i = 0 ; i< n;i++){ ans+=(mp[i]*(mp[i]-1 ))/2 ; } cout<<ans; return 0 ; }
自己的理解
解释 :1要和其他1组一起 满足
0可以单独算也可以组在一起 满足
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;int arr[N],sum[N];int n,k;map<int ,int > mp; signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n>>k; int ans = 0 ; for (int i = 1 ; i<=n;i++){ cin>>arr[i]; sum[i] = (sum[i-1 ]+ arr[i])%k; mp[sum[i]]++; } for (auto i :mp){ if (i.first == 0 ) ans+=i.second*(i.second+1 )/2 ; else ans+=i.second*(i.second-1 )/2 ; } cout<<ans; return 0 ; }
P8623 [蓝桥杯 2015 省 B] 移动距离
题目
思路 纯模拟
重点在于算出两个建筑物的坐标,及需要算出两个建筑物分别的 x 和 y 坐标。
根据样例 不难看出 奇数行和偶数行的情况分别相同
为了方便,我们把 1 2 3 4 5 6 这一行称作第 0 行,
预处理 将编号全部减一 **少做一个特判 爽 **即(1 2 3 4 5 6 )->(0 1 2 3 4 5)
这样一来,显然可以得出对于奇数行第 k 个点的坐标是:
而偶数行为(把奇数行的横坐标倒换):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <bits/stdc++.h> #define int long long #define INF 0x3f3f3f3f #define end '\n' const int N = 10010 ;using namespace std;signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); int w,m,n; cin>>w>>m>>n; m--; n--; int x1 = m%w, y1 = m/w,x2 = n%w,y2 = n/w; if (y1%2 == 1 ){ x1 = w-1 -x1; } if (y2%2 == 1 ){ x2 = w-1 -x2; } cout<<abs (x2-x1) + abs (y2-y1)<<endl; return 0 ; }
P8682 [蓝桥杯 2019 省 B] 等差数列
题目
思路 求公差
这就意味着我们已经知道了最终等差数列的首项和末项,所以我们只需求出公差即可。
为了使项数最少,我们需要公差尽可能地大。
所以任意两项的差均为公差 d 的倍数,于是所求 d 为所有相邻两项差的公约数。又因为 d 要最大,所以 d 就是所有相邻两项差的最大公约数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include <bits/stdc++.h> #define int long long #define INF 0x3f3f3f3f #define end '\n' const int N = 100010 ;using namespace std;int arr[N];int gcd (int x,int y) { if (y == 0 ) return x; return gcd (y, x % y); } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); int n; cin>>n; for (int i = 1 ; i <= n ;i++){ cin>>arr[i]; } sort (arr+1 ,arr+n+1 ); if (arr[1 ]==arr[n]){ cout<<n; return 0 ; } int d = arr[2 ]-arr[1 ]; for (int i = 2 ; i <= n;i++){ d = gcd (d,arr[i]-arr[i-1 ]); } cout<<(arr[n]-arr[1 ])/d+1 <<endl; return 0 ; }
P8720 [蓝桥杯 2020 省 B2] 平面切分
题目
参考题解
思路
当没有任何直线时,显然平面只有一部分。
当有 1 条直线时,平面有 2 个部分。
当有 2 条直线时,第 2 条直线交第 1 条于一个点,所以增加了 2 个部分 ,共 4 个部分。
当有 3 条直线时,第 33条直线交前两条各于一个点,所以又增加了 3 个部分 ,共 7 个部分 (假设没有三线共点或平行) 。
当有 4 条时,增加 3 个交点,4个部分 ,共 11个部分。
当有 5 条时,增加 4 个交点,5 个部分 ,共 16 个部分。
以上推断均保证没有三线共点或平行的情况。 仔细阅读加粗部分显然可以发现,每增加 n 个交点,会多出 n +1 个部分。 我们就成功的把求几部分的问题转化成了求交点的问题。 接着考虑 三点共线 和 平行 的情况。 对于三点共线 ,若一条直线于另两条直线的交点交在一起 (注意我的表述方式) ,因为这一点之前已经分出了它所对应的部分,所以不需要再次统计。 对于一对直线平行 ,则仅对这两条直线来说,它们没有任何交点,因此这对直线不需要计算交点。 综上所述,我们只要模拟以上过程,不断添加一条一条直线并且计算交点个数即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f #define PDD pair<long double,long double> const int N = 100010 ;using namespace std;int n,ans;long double a[N],b[N];bool flag[N];signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n; for (int i = 1 ;i<=n;i++){ cin>>a[i]>>b[i]; set<PDD> s; s.clear (); for (int j = 1 ;j<i;j++){ if (flag[j]) continue ; if (a[i]==a[j]&&b[i]==b[j]){ flag[i] = 1 ; break ; } if (a[i]==a[j]) continue ; s.insert ({(b[i]-b[j])/(a[j]-a[i]),(a[j]*b[i]-a[i]*b[j])/(a[j]-a[i])}); } if (!flag[i]) ans+=s.size ()+1 ; } cout<<ans+1 ; return 0 ; }
P8651 [蓝桥杯 2017 省 B] 日期问题
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <bits/stdc++.h> #define int long long #define endl '\n' const int N = 100010 ;using namespace std;int arr[N];int min_year = 1960 ,max_year = 2059 ;int days[N] = {0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };bool isLeapYear (int year) { if ((year %4 == 0 && year %100 != 0 )||year %400 ==0 ) return true ; else return false ; } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); int a,b,c; scanf ("%d/%d/%d" ,&a,&b,&c); for (int year = min_year;year<=max_year;year++){ days[2 ] = isLeapYear (year)?29 :28 ; for (int month = 1 ; month<=12 ;month++){ for (int day = 1 ; day<=days[month];day++){ if ((a == year % 100 && b == month && c == day) || (a == month && b == day && c == year % 100 ) || (a == day && b == month && c == year % 100 )) printf ("%d-%02d-%02d\n" , year, month, day); } } } return 0 ; }
P8635 [蓝桥杯 2016 省 AB] 四平方和
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <bits/stdc++.h> #define int long long #define endl '\n' const int N = 100010 ;using namespace std;int arr[N];signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); int n; cin>>n; for (int i = 0 ; i*i<=n ;i++){ for (int j = 0 ; i*i+j*j<=n;j++){ for (int k = 0 ;i*i+j*j+k*k<=n;k++ ){ int tmp = n-(i*i+j*j+k*k); int cnt = sqrt (tmp); if (cnt*cnt == tmp){ cout<<i<<' ' <<j<<' ' <<k<<' ' <<cnt<<endl; return 0 ; } } } } return 0 ; }
P8748 [蓝桥杯 2021 省 B] 时间显示
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;int arr[N];int n; signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n; int s = n/1000 ; int hh = s/3600 %24 ; int mm = s%3600 /60 ; int ss = s % 60 ; printf ("%02d:%02d:%02d" ,hh,mm,ss); return 0 ; }
P8781 [蓝桥杯 2022 省 B] 修剪灌木
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;int arr[N];int n; signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n; for (int i = 1 ; i<= n;i++){ cout<<max (n-i,i-1 )*2 <<endl; } return 0 ; }
P8754 [蓝桥杯 2021 省 AB2] 完全平方数
题目
参考题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <bits/stdc++.h> #define ll long long using namespace std;ll n,p[1000 ],g[1000 ],cnt,ans; int main () { cin>>n; for (ll i=2 ;i*i<=n;i++){ if (n%i==0 ) cnt++; while (n%i==0 ){ p[cnt]=i; g[cnt]++; n/=i; } } if (n>1 ){ p[++cnt]=n; g[cnt]++; } ans=1 ; for (int i=1 ;i<=cnt;i++){ if (g[i]%2 ){ ans*=p[i]; } } cout<<ans; return 0 ; }
P8723 [蓝桥杯 2020 省 AB3] 乘法表
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include <bits/stdc++.h> #define int long long #define endl '\n' #define INF 0x3f3f3f3f using namespace std;const int N = 100010 ;int arr[N];int n; string jinzhi (int x,int y) { string now,ret; while (x>0 ){ int add = x%y; if (add >=10 ){ now+=add-10 +'A' ; }else { now+=add+'0' ; } x/=y; } int len = now.size (); for (int i = 0 ; i < len;i++){ ret += now[len-i-1 ]; } return ret; } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n; for (int i =1 ; i<n;i++){ for (int j =1 ; j<=i;j++){ cout<<jinzhi (i,n)<<"*" <<jinzhi (j,n)<<"=" <<jinzhi (i*j,n)<<" " ; } cout<<endl; } return 0 ; }
P8783 [蓝桥杯 2022 省 B] 统计子矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std;const int N = 1000 ;int n,m,k,ans = 0 ;int arr[N][N],sum[N][N];void scan () { cin >> n >> m >> k; for (int i = 1 ; i <= n; i++) { for (int j = 1 ; j <= m; j++) { cin >> arr[i][j]; sum[i][j] = sum[i - 1 ][j] + sum[i][j - 1 ] - sum[i - 1 ][j - 1 ] + arr[i][j]; } } } int getSum (int x1,int y1,int x2,int y2) { return sum[x2][y2]-sum[x1-1 ][y2]-sum[x2][y1-1 ]+sum[x1-1 ][y1-1 ]; } signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); scan (); for (int i = 1 ; i <= n; i++) { for (int j = i; j <= n; j++) { for (int col_l = 1 , col_r = 1 ; col_r <= m; col_r++) { while (col_l <= col_r && getSum (i, col_l, j, col_r) > k) col_l++; if (col_l <= col_r) ans += col_r - col_l + 1 ; } } } cout<<ans; return 0 ; }
P8637 [蓝桥杯 2016 省 B] 交换瓶子
题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <bits/stdc++.h> #define int long long #define endl '\n' using namespace std;const int N = 10005 ;int a[N];int n,ans;signed main () { std::ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); cin>>n; for (int i = 1 ; i <= n; i++) { cin >> a[i]; } for (int j=1 ;j<=n;j++) { for (int i=1 ;i<=n;i++) { if (a[i]!=i) { swap (a[i],a[a[i]]); ans++; } } } cout<<ans<<endl; return 0 ; }