1.H(简单模拟,注意细节)
1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 int er[30],q[1000000];
5 bool cmd(char a,char b,char c)
6 {
7 if(a>='a'&&a<='z'&&c>='a'&&c<='z'&&a<c&&b=='-'||a>='0'&&a<='9'&&c>='0'&&c<='9'&&a<c&&b=='-')
8 return true;
9 else return false;
10 }
11 signed main()
12 {
13 int p1,p2,p3;
14 cin>>p1>>p2>>p3;
15 string s;
16 cin>>s;
17 for(int i=0;i<s.size();i++)
18 {
19 if (cmd(s[i - 1], s[i],s[i + 1])) {
20 if (p1 == 1 && p3 == 1) {
21 for (int j = s[i - 1] + 1; j < s[i + 1]; j++) {
22 for (int k = 0; k < p2; k++)
23 cout << (char) j;
24 }
25 } else if (p1 == 2 && p3 == 1) {
26 for (int j = s[i - 1] + 1; j < s[i + 1]; j++) {
27 for (int k = 0; k < p2; k++) {
28 if (s[i - 1] >= 'a' && s[i - 1] <= 'z')cout << (char) (j - 32);
29 else cout << (char) j;
30 }
31 }
32 } else if (p1 == 3) {
33 for (int j = s[i - 1] + 1; j < s[i + 1]; j++) {
34 for (int k = 0; k < p2; k++)
35 cout << '*';
36 }
37 } else if (p1 == 1 && p3 == 2) {
38 for (int j = s[i + 1] - 1; j > s[i - 1]; j--) {
39 for (int k = 0; k < p2; k++)
40 cout << (char) j;
41 }
42 } else if (p1 == 2 && p3 == 2) {
43 for (int j = s[i + 1] - 1; j > s[i - 1]; j--) {
44 for (int k = 0; k < p2; k++) {
45 if (s[i - 1] >= 'a' && s[i - 1] <= 'z')cout << (char) (j - 32);
46 else cout << (char) j;
47 }
48 }
49 } else cout << "-";
50 }
51 else cout<<s[i];
52 }
53 return 0;
54 }
2.I(通过数字所在的位置来判断二进制串下一个是0或1,再倒过来,但要注意longlong会爆,最后判断初始位,输出即可)
1 #include<bits/stdc++.h>
2 #define int unsigned long long
3 using namespace std;
4 int a[70];
5 signed main()
6 {
7 int n,k;
8 cin>>n>>k;
9 vector<int >v;
10 int d;
11 if (n == 64) {
12 d = (1ull<<63)+(1ull<<63)-1ull;//用来取到2的64次方减一
13 }
14 else d = (1ull << n) - 1;
15 while(d>1)
16 {
17 if(d/2>=k>0)
18 {
19 v.push_back(0);
20 d/=2;
21 }
22 else
23 {
24 k=(d-k);
25 v.push_back(1);
26 d/=2;
27 }
28 }
29 std::reverse(v.begin(), v.end());
30 for(int i=0;i<v.size();i++)cout<<v[i];
31 cout<<endl;
32 string s;
33 if (k == 0) {
34 s = "0";
35 } else s = "1";
36 for (int i = 0; i < v.size(); ++i) {
37 if (v[i] == 0) {
38 s = '0' + s;
39 } else s = '1' + s;
40 }
41 cout << s << endl;
42 return 0;
43 }
3.J (结构体排序后,由于胜者和败者都是有序的数列,直接暴力不可行就利用归并排序,使用stl的merge函数排序即可)
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define int long long
4 struct init{
5 int a,b,c;
6 };
7 bool cmp(init x,init y){
8 if(x.b!=y.b)return x.b>y.b;
9 return x.a<y.a;
10 }
11 signed main(){
12 int n,r,q;
13 cin>>n>>r>>q;
14 n*=2;
15 vector<init>a(n);
16 for (int i = 0; i <n ; ++i)
17 {
18 cin>>a[i].b;
19 a[i].a=i+1;
20 }
21 for (int i = 0; i <n ; ++i)
22 {
23 cin>>a[i].c;
24 }
25 sort(a.begin(), a.end(),cmp);
26 while(r--){
27 vector<init>p,q;
28 for (int i = 0; i <n ; i+=2)
29 {
30 if(a[i].c>a[i+1].c){
31 a[i].b++;
32 p.push_back(a[i]);
33 q.push_back(a[i+1]);
34 }
35 else
36 {
37 a[i+1].b++;
38 p.push_back(a[i+1]);
39 q.push_back(a[i]);
40 }
41 }
42 merge(p.begin(),p.end(),q.begin(),q.end(),a.begin(),cmp);
43 }
44 cout<<a[q-1].a;
45 }