赞
踩
A: 小G的日常之ABABAB
思路:统计一下奇数位和偶数位,每个数字的个数,用总个数减去奇数位和偶数位出现最多的个数就是答案。
- #include <bits/stdc++.h>
- using namespace std;
- int a[1005], b[100005], c[100005];
- int main()
- {
- int n;
- scanf("%d",&n);
- memset(b,0,sizeof(b));
- memset(c,0,sizeof(c));
- for(int i = 1; i <= n; i++)
- {
- scanf("%d",&a[i]);
- if(i % 2 != 0) b[a[i]]++;
- else c[a[i]]++;
- }
- int m1 = 0, m2 = 0;
- for(int i = 0; i <= 100000; i++)
- {
- m1 = max(m1, b[i]);
- m2 = max(m2, c[i]);
- }
- int ans = n - m1 - m2;
- printf("%d\n",ans);
-
- return 0;
- }
B: 小G的日常之开关灯
思路:从左第一个关灯的位置开始按要求模拟即可。
- #include <bits/stdc++.h>
- using namespace std;
- int a[1005];
- int main()
- {
- int n; scanf("%d",&n);
- for(int i = 0; i < n; i++)
- scanf("%d",&a[i]);
- int flag = 0, cnt = 0;
- while(1)
- {
- flag = 0;
- for(int i = 0; i < n; i++)
- {
- if(a[i] == 0)
- {
- for(int j = i; j < n; j++)
- {
- if(a[j] == 0) a[j] = 1;
- else a[j] = 0;
- }
- cnt++;
- }
- }
- for(int i = 1; i < n; i++)
- {
- if(a[i] == a[i-1] && a[i] == 1)
- continue;
- else flag = 1;
- }
- if(!flag) break;
-
- }
- printf("%d\n",cnt);
- return 0;
- }
C: 小G的日常之折扣票价
- #include <bits/stdc++.h>
- using namespace std;
- int a[1005];
- int main()
- {
- double a, b, c;
- scanf("%lf%lf",&a,&b);
- c = b / 2.0;
- printf("%.2f",a+c);
- return 0;
- }
D: 小G的日常之签到
- #include <bits/stdc++.h>
- using namespace std;
- int a[1005];
- int main()
- {
- int a, b;
- scanf("%d%d",&a,&b);
- for(int c = a; c <= b; c++)
- {
- if(a * b * c % 2 != 0)
- {puts("Yes"); return 0;}
- }
- puts("No");
- return 0;
- }
E: 小G的日常之算术题
- #include<bits/stdc++.h>
- using namespace std;
- int main()
- {
- int a,b;
- char s[5][70]={"#####......#..#####..#####..#...#..#####..#####..#####..#####..#####","#...#......#......#......#..#...#..#......#..........#..#...#..#...#","#...#......#..#####..#####..#####..#####..#####......#..#####..#####","#...#......#..#..........#......#......#..#...#......#..#...#......#","#####......#..#####..#####......#..#####..#####......#..#####..#####"};
- scanf("%d %d",&a,&b);
- int ans = a + b;
- int x[20], l = 0;
- if(ans == 0)
- {
- x[0] = 0;
- l++;
- }
- while(ans != 0)
- {
- x[l++] = ans % 10;
- ans = ans / 10;
- }
- for(int j = 0; j < 5; j++)
- {
- for(int i = l - 1; i >= 0; i--)
- {
- if(x[i] == 0)
- for(int k = 0; k < 5; k++)
- printf("%c",s[j][k]);
- if(x[i] == 1)
- for(int k = 7; k < 12; k++)
- printf("%c",s[j][k]);
- if(x[i] == 2)
- for(int k = 14; k < 19; k++)
- printf("%c",s[j][k]);
- if(x[i] == 3)
- for(int k = 21; k < 26; k++)
- printf("%c",s[j][k]);
- if(x[i] == 4)
- for(int k = 28; k < 33; k++)
- printf("%c",s[j][k]);
- if(x[i] == 5)
- for(int k = 35; k < 40; k++)
- printf("%c",s[j][k]);
- if(x[i] == 6)
- for(int k = 42; k < 47; k++)
- printf("%c",s[j][k]);
- if(x[i] == 7)
- for(int k = 49; k < 54; k++)
- printf("%c",s[j][k]);
- if(x[i] == 8)
- for(int k = 56; k < 61; k++)
- printf("%c",s[j][k]);
- if(x[i] == 9)
- for(int k = 63; k < 68; k++)
- printf("%c",s[j][k]);
- if(i != 0)
- printf("..");
- }
- printf("\n");
- }
- }
-
-
F: 小G的日常之股票
- #include <bits/stdc++.h>
- using namespace std;
- int main()
- {
- int t, n;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d",&n);
- int mx = 0, x;
- for(int i = 0; i < n; i++)
- {
- scanf("%d",&x);
- mx = max(mx, x);
- }
- printf("%d\n",mx);
-
- }
- return 0;
- }
G: 小G的日常之游戏(二)
思路:用map映射一下,然后按要求模拟。
- #include <bits/stdc++.h>
- using namespace std;
- map<string,int> mp;
- int main()
- {
- int n, flag = 0;
- scanf("%d",&n); string s, st, se;
- cin >> s; mp[s]++; se = s[s.length()-1];
- for(int i = 0; i < n - 1; i++)
- {
- cin >> s;
- st = s[0];
- if(st != se) flag = 1;
- mp[s]++;
- if(mp[s] > 1) flag = 1;
- se = s[s.length()-1];
- }
- if(!flag) puts("Yes");
- else puts("No");
-
- return 0;
- }
H: 小G的日常之烦心事
思路:式子化简一下就很容易了。
当a[j]-a[i]>0时,abs(a[j]-a[i])+j-i= a[j] - a[i] + j - i = (a[j] + j) - (a[i] + i)。
当a[j]-a[i]<0时,abs(a[j]-a[i])+j-i= a[i] - a[j] + j - i = (a[i] - i)-(a[j] - j)。
- #include<bits/stdc++.h>
- using namespace std;
- const int N = 1e6+10;
- int a[N];
- int main()
- {
- int n, mx = 0, mi = N, sum;
- scanf("%d",&n);
- for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
- for(int i = 1; i <= n; i++)
- {
- a[i] -= i;
- mx = max(a[i],mx);
- mi = min(a[i],mi);
- }
- sum = mx - mi; mx = 0, mi = N;
- for(int i = 1; i <= n; i++)
- {
- a[i] += 2*i;
- mx = max(a[i],mx);
- mi = min(a[i],mi);
- }
- sum = max(sum, mx - mi);
- printf("%d\n",sum);
- return 0;
- }
I: 小G的日常之游戏
思路:不知道为啥用string会超时,那就用char 直接模拟吧。
- #include<bits/stdc++.h>
- using namespace std;
- const int N = 1e6+5;
- char a[N];
- int main()
- {
- cin >> a;
- int len = strlen(a);
- while(1)
- {
- int flag = 0, k = 0;
- for(int i = 0; i < len - 1; i++)
- {
- if(a[i] != '*')
- {
- for(int j = i+1 ; j < len ; j++)
- {
- if(a[j] != '*')
- {
- k = j;
- break;
- }
- }
- if(a[i] == a[k])
- {
- a[i] = a[k] = '*';
- flag = 1;
- }
- }
- }
- if(!flag) break;
- }
- for(int i = 0; i < len; i++)
- if(a[i] != '*') cout << a[i];
- }
J: 小G的日常之接雨水
思路:方法一从左扫一遍然后从右扫一遍,方法二双指针左右同时扫,现在只讲方法二,首先接雨水的多少肯定取决于最短柱子(木桶原理),我们维护左右两个最高的柱子,然后分别用两条指针,分别从两端向最高的柱子靠近,如果柱子大于前面柱子的最大值则不存在积水,小于则存在积水,积水量等于前面柱子的最大值减去此柱子高度。
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- const int maxn = 1e6+10;
- int main()
- {
- int n, a[maxn]; scanf("%d",&n);
- for(int i = 0; i < n; i++) scanf("%d",&a[i]);
- int l = 0, r = n - 1, rmax = 0, lmax = 0;
- ll ans = 0;
- while(l < r)
- {
- lmax = max(lmax, a[l]);
- rmax = max(rmax, a[r]);
- if(lmax < rmax)
- ans += lmax - a[l], l++;
- else
- ans += rmax - a[r], r--;
- }
- printf("%lld\n", ans);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。