首页 > 其他 > 详细

解题报告 SNNUACMer,18~21

时间:2017-01-19 21:36:40      阅读:207      评论:0      收藏:0      [点我收藏+]

A - Ilya and Diplomas

 题目链接:http://codeforces.com/problemset/problem/557/A

 题意:给出n和三个区间[l1,r1] , [l2,r2] , [l3,r3] 在三个区间中取三个数,使这三个数之和为n,若有多个解,取第一个区间最大的,第二个区间最大的,第三个区间最大的……

本来我觉得作为A题,想着三个循环剪枝 10^6 应该可以过。过不了……

于是进行计算。

做法:先确定 ans1 (尽可能大,又要保证ans2和ans3合法 ,所以取r1和 n - l2 - l3 的最小值。) ,同理,再再ans1确定的基础上确定ans2,然后计算ans3。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cmath>
 5 #include<algorithm>
 6 int n,min1 , min2 , min3 , max1 ,max2,max3;
 7 int a,b,c;
 8 using namespace std ;
 9 int main()
10 {
11     cin >> n ;
12     cin >> min1 >> max1
13         >> min2 >> max2
14         >> min3 >> max3;
15     a = min( max1, n - min2 - min3 );
16     b = min( max2 ,n - a - min3 );
17     c = min(max3 , n - a - b ) ;
18     cout << a <<   << b <<  << c << endl ;
19     return 0 ;
20 }

 

 

 

B - Secrete Master Plan

 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5540

 

题意: 给定两个矩阵,这两个矩阵能否通过旋转重合……

 

做法: 模拟,比较—再旋转—再比较……如果都不行就是IMPOSSIBLE,能重合就是POSSIBLE。

注意拿一维数组处理的话,读取顺序是 1 2 4 3 , 以及旋转问题。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 using namespace std ;
 8 
 9 int main()
10 {
11     int a[5],b[5];
12     int t ;
13     cin >> t ;
14     for( int cas = 1 ; cas <=t ; cas++)
15         {
16             memset(a,0,sizeof(a));
17             memset(a,0,sizeof(b));
18             cin >> a[1] >> a[2] >> a[4] >> a[3] ; // 注意读取顺序
19             cin >> b[1] >> b[2] >> b[4] >> b[3] ;
20             bool flag = false ; 
21             for( int i = 1 ; i <= 4 ; i++)
22             {
23                 if( a[1] == b[1] && a[2] == b[2] && a[3] == b[3] && a[4] == b[4] )
24                     flag = true ;
25                 else
26                 {    //rotate
27                     int temp ;
28                     temp = a[1],a[1] = a[2],a[2] = a[3],a[3] = a[4],a[4] = temp;
29                 }
30             }
31         printf("Case #%d: ",cas);
32         if( flag )
33             cout <<"POSSIBLE" << endl ;
34         else
35             cout << "IMPOSSIBLE" << endl ;        
36         }
37     return 0 ;
38 }

 

C - Guess the Dice

 题目链接:http://acm.uestc.edu.cn/#/problem/show/121

 

 题意: 给8个视角, 让你判断一个骰子 1 2 3 4 5 6 分别对应的是多少?

 

 做法:对每一个面i,他对应的面就是和他同一视角的里面没有出现过的那个数。

比如样例:


1 2 3 
1 3 4 
1 4 5 
1 5 2 
6 3 2 
6 4 3 
6 5 4 
6 2 5

和1在同一视角出现过的有 2 3 , 3 4 , 4 5 , 5 2 

那么没出现过的6就是他的对面。

模拟做一下就好了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std ;
int a[8][3];
int main()
{
    int t ;
    cin >> t ;
    bool flag[7];
    while( t-- )
        {
            bool flagg = false ;
            memset(a,0,sizeof(a));
            for( int i = 0 ; i < 8 ; i++)
                cin >> a[i][0] >> a[i][1] >> a[i][2] ;
            for( int i = 1 ; i <= 6 ; i++)
                {
                    for( int s = 0 ; s < 7 ; s++)
                        flag[s] = true ;
                    flag[i] = false ;
                    for( int j = 0 ; j < 8 ; j++)
                        {
                            for( int k = 0 ; k < 3 ; k++)
                                {
                                    if( a[j][k] == i )
                                        {
                                            flag[a[j][(k+1)%3]]=false,flag[a[j][(k+2)%3]]=false;
                                            break ;
                                        }
                                }
                        }
                    for( int s = 1 ; s <= 6 ; s++)
                        {
                            if( flag[s] )
                                {
                                    if(flagg)
                                        cout <<   << s ;
                                    else
                                        {
                                            cout <<s;
                                            flagg=true;
                                        }
                                }
                        }
                }
        cout << endl;
        }
        return 0 ; 
}

 

D - Lucky Division

 题目链接:http://codeforces.com/problemset/problem/122/A

 

 题意: 只有4和7组成的数字是幸运数字,给一个n,问n能否被幸运数字整除。

做法: 数据量只有1000,手算出4和7组成的所有情况,暴力试探能否整除。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std ;
const int array[] ={4,7,44,47,74,444,447,474,477,744,747,774,777};
bool judge( int n )
{
    for( int i = 0 ; i < 12 ; i++)
        if( n % array[i] == 0 )
            return true ;
    return false ;
}
int main()
{
    int n ;
    cin >> n ;
    if( judge(n) )
        cout << "YES" << endl ;
    else
        cout <<"NO"<<endl;
    return 0 ; 
}

 

 

E - Lucky Substring

 题目链接:http://codeforces.com/problemset/problem/122/B

 题意: 给一个字符串,问由哪个幸运数组组成的子串最多?最多的情况下按字典序排列。没有输出-1;

做法: 4和7肯定是他的最小子串,子串是最多的。只要数4和7的个数,并且注意一下按字典序就好。

 1     #include<iostream>
 2     #include<cstdio>
 3     #include<cstdlib>
 4     #include<cmath>
 5     #include<algorithm>
 6     #include<cstring>
 7     using namespace std ; 
 8     int main()
 9     {
10         string s ;
11         cin >> s ;
12         int count1=0,count2=0;
13         for( int i = 0 ; i < s.size() ; i++)
14             {
15                 if(s[i] == 4 )
16                     count1++;
17                 else if(s[i] ==7)
18                     count2++;
19             }
20         if( count1 == 0 && count2 == 0 )
21             cout <<"-1"<<endl;
22         else if( count1 >= count2 )
23             cout << "4" << endl ;
24         else
25             cout << "7" << endl ;
26         return 0 ;
27     }

 

 

F - Prime Permutation

 题目链接:http://codeforces.com/problemset/problem/123/A

G - An Easy Physics Problem

 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5572

这两道题太难了不适合我这种蒟蒻。

我还是去做AOAPC吧……

 

解题报告 SNNUACMer,18~21

原文:http://www.cnblogs.com/xiekeyi98/p/6307367.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!