North America Qualifier (2015)

https://icpc.baylor.edu/regionals/finder/north-america-qualifier-2015

一个人打。。。。

B

概率问题公式见代码

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <queue>
 5 #include <stack>
 6 #include <vector>
 7 #include <algorithm>
 8 using namespace std;
 9 #define clc(a,b) memset(a,b,sizeof(a))
10 #define inf 0x3f3f3f3f
11 const int N=10010;
12 const int MOD = 1e9+7;
13 #define LL long long
14 void fre() {
15     freopen("in.txt","r",stdin);
16 }
17  
18 inline int r(){
19     int x=0,f=1;char ch=getchar();
20     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
21     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
22     return x*f;
23 }
24  
25 int countt;
26 int  comb1(int m,int k)
27 {     
28     int i;
29     for (i=m;i>=k;i--)
30     {
31         if (k>1)
32         {
33             comb1(i-1,k-1);
34         }
35         else
36         { 
37             countt++;
38         }
39     }
40     return countt;           
41 }
42  
43 int main(){
44     // fre();
45     int T;
46     int R,s,x,y,w;
47     T=r();
48     while(T--){
49         double p1=0.0;
50         int num;
51        cin>>R>>s>>x>>y>>w;
52        double p=(s-R+1)*1.0/s;
53        double ans=0.0;
54        for(int i=x;i<=y;i++){
55            int c=y-i;
56            p1=1.0;
57            double p2=1.0-p;
58            while(c--){
59                p1*=p2;
60            }
61            int cc=i;
62            double P=1.0;
63            for(int j=1;j<=i;j++){
64               P*=p;
65            }
66            // cout<<i<<" "<<P<<endl;
67            countt=0;
68            num=comb1(y,i);
69            // cout<<P<<" "<<p1<<" "<<num<<endl;
70           ans+=P*p1*num;
71        }
72        // cout<<ans<<endl;
73        if(ans*w>1)
74         printf("yes\n");
75        else
76         printf("no\n");
77     }
78     return 0;
79 }


F

水题

输出字符串中缺少的字母

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<queue>
 5 #include<stack>
 6 #include<algorithm>
 7 using namespace std;
 8 #define clc(a,b) memset(a,b,sizeof(a))
 9 #define inf 0x3f3f3f3f
10 const int N=10010;
11 const int MOD = 1e9+7;
12 #define LL long long
13 void fre(){freopen("in.txt","r",stdin); }
14 // inline int r(){
15 //     int x=0,f=1;char ch=getchar();
16 //     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
17 //     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
18 //     return x*f;
19 // }
20 int a[30];
21 char ans[30];
22 int main()
23 {
24      
25     int T;
26     scanf("%d",&T);
27     getchar();
28     while(T--)
29     {
30         clc(a,0);
31         clc(ans,0);
32         string s;
33         getline(cin,s);
34         for(int i = 0; i < s.length(); i ++){
35             if(s[i] >= 'a' && s[i] <= 'z')
36             a[s[i] - 'a'] ++;
37             if(s[i] >= 'A' && s[i] <= 'Z')
38             a[s[i] - 'A'] ++;
39         }
40         int k = 0;
41         for(int i  = 0; i < 26; i ++){
42             if(!a[i]){
43                 ans[k++] = i + 'a';
44             }
45         }
46         if(k ==0) {
47             printf("pangram\n");
48         }
49         else{
50             printf("missing ");
51             for(int i = 0; i< k;  i ++){
52                 printf("%c",ans[i]);
53             }
54             printf("\n");
55         }
56     }
57     return 0;
58 }

G

过河的经典问题

多个人过河每次船上必须有一人问最短时间

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <queue>
 5 #include <stack>
 6 #include <vector>
 7 #include <algorithm>
 8 using namespace std;
 9 #define clc(a,b) memset(a,b,sizeof(a))
10 #define inf 0x3f3f3f3f
11 const int N=10010;
12 const int MOD = 1e9+7;
13 #define LL long long
14 void fre() {
15     freopen("in.txt","r",stdin);
16 }
17  
18 inline int r(){
19     int x=0,f=1;char ch=getchar();
20     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
21     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
22     return x*f;
23 }
24  
25 int TravelBridge(std::vector<int> times)
26 {
27     size_t length = times.size();
28     if(length <= 2)
29         return times[length-1];
30     else if(length == 3)
31     {
32         return times[0] + times[1] + times[2];
33     }
34     else
35     {
36         int totaltime = 0;
37         int a = times[0];
38         int b = times[1];
39         int z = times[length-1];
40         int y = times[length-2];
41         if(b*2 < a + y)
42         {
43             times.erase(times.end()-1);
44             times.erase(times.end()-1);
45             totaltime += b + a + z + b + TravelBridge(times);
46         }
47         else
48         {
49             times.erase(times.end()-1);
50             totaltime += z + a + TravelBridge(times);
51         }
52         return totaltime;
53     }
54 }
55  
56 int main(){
57     int n;
58     n=r();
59     vector<int> v;
60     for(int i=0;i<n;i++){
61         int x;
62         x=r();
63         v.push_back(x);
64     }
65     sort(v.begin(),v.end());
66     int ans=TravelBridge(v);
67     printf("%d\n",ans);
68     return 0;
69 }

H

水题

旋转矩阵再输出

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<queue>
 5 #include<stack>
 6 #include<algorithm>
 7 using namespace std;
 8 #define clc(a,b) memset(a,b,sizeof(a))
 9 #define inf 0x3f3f3f3f
10 const int N=10010;
11 const int MOD = 1e9+7;
12 #define LL long long
13 void fre() {
14     freopen("in.txt","r",stdin);
15 }
16  
17 inline int r(){
18     int x=0,f=1;char ch=getchar();
19     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
20     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
21     return x*f;
22 }
23  
24 char s[10010];
25 char a[110][110];
26 int main() {
27     // fre();
28     int T;
29     T=r();
30     // getchar();
31     while(T--) {
32         scanf("%s",s);
33         int len = strlen(s);
34         int q = 0;
35         for(; ; q ++) {
36             if(q * q >= len) {
37                 break;
38             }
39         }
40         // cout<<s[0]<<endl;
41         int pos;
42         for(int i = 0; i < q; i ++) {
43             for(int j = 0; j < q ; j ++) {
44                 pos = i * q + j;
45                 if(pos >= len) {
46                     a[i][j] = '*';
47                 } else {
48                     a[i][j] = s[pos];
49                 }
50             }
51         }
52         // printf("%c\n",a[0][0]);
53         // for(int i=0;i<q;i++){
54         //     for(int j=0;j<q;j++){
55         //         printf("%c ",a[i][j]);
56         //     }
57         //     printf("\n");
58         // }
59         for(int j = 0; j < q ; j ++) {
60             for(int i = q - 1; i >= 0; i --) {
61                 if(a[i][j] != '*')
62                     printf("%c",a[i][j]);
63             }
64         }
65         printf("\n");
66     }
67     return 0;
68 }

J

把单词映射成数字

从起点到终点搜索

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <algorithm>
  4 #include <list>
  5 #include <map>
  6 #include <stack>
  7 #include <vector>
  8 #include <cstring>
  9 #include <sstream>
 10 #include <string>
 11 #include <cmath>
 12 #include <queue>
 13 using namespace std;
 14 #define clc(a,b) memset(a,b,sizeof(a))
 15 #define inf 0x3f3f3f3f
 16 const int N=10010;
 17 const int MOD = 1e9+7;
 18 #define LL long long
 19 void fre() {
 20     freopen("in.txt","r",stdin);
 21 }
 22 inline int r() {
 23     int x=0,f=1;
 24     char ch=getchar();
 25     while(ch>'9'||ch<'0') {
 26         if(ch=='-') f=-1;
 27         ch=getchar();
 28     }
 29     while(ch>='0'&&ch<='9') {
 30         x=x*10+ch-'0';
 31         ch=getchar();
 32     }
 33     return x*f;
 34 }
 35  
 36 int a[35][35] = {0};
 37 int p[35];
 38 string s[35];
 39 int n;
 40 int ans[100];
 41 bool idx[35] = {false};
 42 int num = 1;
 43 map<string,int> mapp;
 44  
 45 void dfs(int u,int v) {
 46     if(u == v)
 47         return;
 48     idx[u] = true;
 49     for(int i = 1; i <= num; i ++) {
 50         if(a[u][i] == 1 && idx[i] == false) {
 51             p[i] =u;
 52             dfs(i,v);
 53         }
 54     }
 55     idx[u] = false;
 56 }
 57  
 58 int main() {
 59     clc(a,0);
 60     mapp.clear();
 61     n=r();
 62     // getchar();
 63     string line,x;
 64     string s1,s2;
 65     int k = 0;
 66     int t;
 67     bool flag = false;
 68     int u,v;
 69     for(int i =0; i < n; i ++) {
 70         getline(cin,line);
 71         stringstream ss(line);
 72         ss>>x;
 73         if(mapp[x] == 0) {
 74             mapp[x] = num;
 75             s[num] = x;
 76             num ++;
 77         }
 78         u = mapp[x];
 79         while(ss >> x) {
 80             if(mapp[x] == 0) {
 81                 mapp[x] = num;
 82                 s[num] = x;
 83                 num ++;
 84             }
 85             v = mapp[x];
 86             a[u][v] = 1;
 87             a[v][u] = 1;
 88         }
 89     }
 90     cin>>s1>>s2;
 91     if(mapp[s1] == 0) {
 92         mapp[s1] = num;
 93         num ++;
 94     }
 95     u= mapp[s1];
 96     if(mapp[s2] == 0) {
 97         mapp[s2] = num;
 98         num ++;
 99     }
100     v = mapp[s2];
101     dfs(u,v);
102     p[u] = -1;
103     t = v;
104     while(t != -1) {
105         ans[k ++] = t;
106         if(t == 0) {
107             flag = true;
108             break;
109         }
110         t = p[t];
111     }
112     if(flag == true) {
113         printf("no route found\n");
114         return 0;
115     }
116     for(int i = k - 1; i >= 1; i --) {
117         cout<<s[ans[i]]<<" ";
118     }
119     cout<<s[v]<<endl;
120  
121 }

一个人打也挺好玩的

posted @ 2016-06-09 22:09  yyblues  阅读(759)  评论(0编辑  收藏  举报