导弹拦截


1 //震惊!puts("0")竟然没分!
2 //第二问贪心选择每行第二大的数中最大的那个
3 #include<bits/stdc++.h>
4 using namespace std;
5 int num[501][501];
6 int main(){
7 int N , maxN = 0 , dirA , dirB , maxA = 0 , maxDirA , maxB = 0 , maxDirB;
8 cin >> N;
9 for(int i = 1 ; i < N ; i++)
10 for(int j = i + 1 ; j <= N ; j++)
11 {
12 cin >> num[i][j];
13 num[j][i] = num[i][j];
14 }
15 for(int i = 1 ; i <= N ; i++)
16 {
17 int m = 0 , dir , mci = 0 , dirci;
18 for(int j = 1 ; j <= N ; j++)
19 if(i ^ j)
20 if(m < num[i][j])
21 {
22 mci = m;
23 m = num[i][j];
24 dirci = dir;
25 dir = j;
26 }
27 else if(mci < num[i][j])
28 {
29 mci = num[i][j];
30 dirci = j;
31 }
32 if(mci > maxN){
33 maxN = mci;
34 dirA = i;
35 dirB = dirci;
36 }
37 }
38 for(int i = 1 ; i <= N ; i++)
39 if(i ^ dirA && i ^ dirB && maxA < num[dirA][i])
40 {
41 maxA = num[dirA][i];
42 maxDirA = i;
43 }
44 for(int i = 1 ; i <= N ; i++)
45 if(i ^ dirB && i ^ dirA && i ^ maxDirA && maxB < num[dirB][i])
46 {
47 maxB = num[dirB][i];
48 maxDirB = i;
49 }
50 if(num[maxDirA][maxDirB] > num[dirA][dirB]){
51 cout << 0;
52 return 0;
53 }
54 for(int i = 1 ; i <= N ; i++)
55 if(i ^ dirA && i ^ dirB && i ^ maxDirA && i ^ maxDirB && (num[i][maxDirA] > maxN || num[i][maxDirB] > maxN))
56 {
57 int m = 0 , mDir;
58 for(int j = 1 ; j <= N ; j++)
59 if(j ^ dirA && j ^ dirB && j ^ maxDirA && j ^ maxDirB && j ^ i && m < num[i][j])
60 {
61 m = num[i][j];
62 mDir = j;
63 }
64 if(num[mDir][dirA] > m || num[mDir][dirB] > m)
65 {
66 cout << 0;
67 return 0;
68 }
69 }
70 cout << 1 << endl << maxN;
71 return 0;
72 }
三国游戏


1 #include<bits/stdc++.h>
2 using namespace std;
3 int main()
4 {
5 string s;
6 cin >> s;
7 if(s[0] == '-')
8 {
9 cout << '-';
10 s = string(s , 1 , s.size() - 1);
11 }
12 int f = 0;
13 for(int i = s.size() ; i ; i--)
14 if(f || s[i - 1] - '0')
15 {
16 cout << s[i - 1];
17 f = 1;
18 }
19 return 0;
20 }
数字反转


1 #include<bits/stdc++.h>
2 using namespace std;
3 char s1[10001] , s2[1000011];
4 int l1 , l2;
5 inline bool cmp(int i)
6 {
7 for(int j = 0 ; j < l1 ; j++)
8 if(s1[j] != s2[j + i]) return false;
9 return true;
10 }
11 int main()
12 {
13 int cou = 0 , couF = -1;
14 gets(s1);
15 gets(s2);
16 l1 = strlen(s1);
17 l2 = strlen(s2);
18 for(int i = 0 ; i < l1 ; i++)
19 if(s1[i] >= 'A' && s1[i] <= 'Z') s1[i] += 'a' - 'A';
20 for(int i = 0 ; i < l2 ; i++)
21 if(s2[i] >= 'A' && s2[i] <= 'Z') s2[i] += 'a' - 'A';
22 for(int i = 0 ; i <= l2 - l1 ; i++)
23 if(cmp(i) && (!i || s2[i - 1] == ' ') && (i == l2 - l1 || s2[l1 + i] == ' '))
24 {
25 cou++;
26 if(couF == -1) couF = i;
27 }
28 if(cou) cout << cou << " " << couF;
29 else cout << -1;
30 return 0;
31 }

统计单词数


1 //归并排序
2 #include<bits/stdc++.h>
3 using namespace std;
4 struct can{
5 int sl , fs , i;
6 }ans[200001] , win[100001] , lose[100001];
7 int n;
8 void gb()
9 {
10 int dirA = 0 , dirB = 0;
11 for(int i = 0 ; i < 2 * n ; i++)
12 if(dirA != n && (dirB == n || win[dirA].fs > lose[dirB].fs || win[dirA].fs == lose[dirB].fs && win[dirA].i < lose[dirB].i))
13 ans[i] = win[dirA++];
14 else ans[i] = lose[dirB++];
15 }
16 bool cmp(can a , can b)
17 {
18 return a.fs > b.fs || a.fs == b.fs && a.i < b.i;
19 }
20 int main()
21 {
22 ios::sync_with_stdio(false);
23 int r , q;
24 cin >> n >> r >> q;
25 for(int i = 0 ; i < 2 * n ; i++) cin >> ans[i].fs;
26 for(int i = 0 ; i < 2 * n ; i++)
27 {
28 cin >> ans[i].sl;
29 ans[i].i = i + 1;
30 }
31 sort(ans , ans + n * 2 , cmp);
32 while(r--)
33 {
34 for(int i = 0 ; i < n ; i++)
35 {
36 if(ans[i * 2].sl > ans[i * 2 + 1].sl)
37 {
38 win[i] = ans[i * 2];
39 lose[i] = ans[i * 2 + 1];
40 }
41 else
42 {
43 win[i] = ans[i * 2 + 1];
44 lose[i] = ans[i * 2];
45 }
46 win[i].fs++;
47 }
48 gb();
49 }
50 cout << ans[q - 1].i;
51 return 0;
52 }
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-124192-7.html
直接撞它
我有去看
不是经济问题