2021寒假积分赛(三)

A:抱歉HDU - 1418

非常抱歉,本来兴冲冲地搞一场练习赛,由于我准备不足,出现很多数据的错误,现在这里换一个简单的题目:

前几天在网上查找ACM资料的时候,看到一个中学的奥数题目,就是不相交的曲线段分割平面的问题,我已经发到论坛,并且lxj 已经得到一个结论,这里就不

多讲了,下面有一个类似的并且更简单的问题:

如果平面上有n个点,并且每个点至少有2条曲线段和它相连,就是说,每条曲线都是封闭的,同时,我们规定:
1)所有的曲线段都不相交;
2)但是任意两点之间可以有多条曲线段。

如果我们知道这些线段把平面分割成了m份,你能知道一共有多少条曲线段吗?

Input输入数据包含n和m,n=0,m=0表示输入的结束,不做处理。
所有输入数据都在32位整数范围内。Output输出对应的线段数目。Sample Input
3 2
0 0
Sample Output
3
显而易见,这一题是一个结论,顶点+面数-2=棱数;
   int n, m;
    while(cin>>n>>m)
      {
        if(n==0&&m==0)break;
       cout<<n+m-2<<'\n';
    }

B - {A} + {B} HDU - 1412

 

 很简单,考点就是去重,这里用set或者unique去重都可以,唯一容易PE的就是格式最后一个没有空格;

1 while(cin>>n>>m){//unique去重;
2         for(int i=0;i<n+m;i++)cin>>a[i];
3         sort(a,a+n+m);
4         int t=unique(a,a+n+m)-a;
5         cout<<a[0];
6         for(int i=1;i<t;i++)cout<<" "<<a[i];
7         cout<<'\n';
8    }
 1 while(cin>>n>>m){//set去重
 2         set<int>s;
 3         for(int i=0;i<n+m;i++){
 4             int t;cin>>t;
 5             s.insert(t);
 6         }
 7         
 8         for(auto t=s.begin();t!=s.end();t++){
 9             if(t==s.begin())cout<<*t;
10             else cout<<" "<<*t;
11         }
12         cout<<'\n';
13     }

C - 钱币兑换问题

 

 一个简单的完全背包问题没什么好说的

 1  
 2  int n;
 3       f[0]=1;
 4      for(int j=1;j<=3;j++){
 5       for(int i=1;i<=32768;i++){
 6           f[i]=max(f[i],f[i]+f[i-j]);
 7          }     
 8     }
 9   while(cin>>n){
10           cout<<f[n]<<'\n';
11       }    
posted @ 2021-02-17 12:00  小靖快去敲代码  阅读(51)  评论(0编辑  收藏  举报