The 6th Zhejiang Provincial Collegiate Programming Contest

A:Second-price Auction  ZOJ 3202
题目大意:n人竞拍,输出拍价最高的下标,以及拍价第二高的数值
代码:
 

#include 
#include 
#include 
#include 
using namespace std;
int a[110];
int main(){
    int T;
    while(scanf("%d",&T)!=EOF){
         while(T--){
                int n;
            int maxn=-1;
            int flag=0;
            scanf("%d",&n);
            for(int i=0;imaxn)
                  {maxn=a[i];flag=i;}
            }
           sort(a,a+n);
           printf("%d %d\n",flag+1,a[n-2]);
         }
    }
    return 0;
}

F:80ers' Memory   ZOJ  3207
题目大意:N个标准字符串,给k行数据,每行数据x个字符串,问这x个字符串有几个在N个标准字符串中。
 

#include 
#include 
using namespace std;
mapp;
int main()
{
    int n;
    cin >> n;
    string s;
    for(int i=1;i<=n;i++)
    {
        cin >> s;
        p[s]++;
    }
    int m,x;
    cin >> m;
    int sum;
    for(int i=1;i<=m;i++)
    {
        cin >> x;
        sum = 0;
        for(int j=1;j<=x;j++)
        {
            cin >> s;
            if(p[s])
                sum++;
        }
        cout << sum<

I:A Stack or A Queue?    ZOJ  3210
题目大意:每个测试案例中有n个数据,两行数据,第一行代表入,第二行代表出。问这组数据是满足queue、stack、both、neiher其中的哪种情况。(数据没有全部进入前,没有数据输出)
思路:先让第一组数据向右依次与第二组数据进行比较,遇到不符合的情况就标记flag1为0,break循环。再让第一组数据反着与第二组数据进行比较,遇到不符合的情况就标记flag2为0,break循环。(flag1与flag2的初始值为1)。最后进行判断
if(flag1==1&&flag2==1) 输出both
if(flag==1&&flag2==0)输出 queue
if(flag==0&&flag2==1)输出 stack
if(flag==0&&flag2==0)输出 neither

J:Dream City  ZOJ 3211
 

K:K-Nice  ZOJ 3212
题目大意:
当一个元素的四周均有元素时,定义为这个元素在矩阵内。"nice"数的意思是,在矩阵内的元素,且该元素四周元素的和等于该元素本身。现有一个n*m矩阵,在该矩阵内有k个nice数,请你输出一个这样的矩阵。
思路:有案例可以看出,k个nice数均使它为0即可。接下来的目标就是输出多少个0可以构造出k个nice  0 。
注意两个问题:1、由于有大量的案例用scanf与printf,用cin与cout会超时
                           2、不是0元素的值,不可以全是1,若全是1遇见特殊情况会出错。
如: 0000     这个矩阵的本意是构造出一个nice数,但实际上会有两个。第三行第三个1元素是额外的1个nice数。
        0000
        0010  
        0110  
代码: 自己的代码是先输出0,再输出其他数
 

#include 
#include 
#include
using namespace std;
int a[20][20];
int main()
{
    int T;
    int n,m,k;
    while(scanf("%d",&T)!=EOF)
    {
        while(T--)
        {
            //cin>>n>>m>>k;
            scanf("%d%d%d",&n,&m,&k);
            //memset(a,-1,sizeof(a));
            if(n>=3&&m>=3)//n与m大于于3时,才存在nice数
            {
                int flag=1;//对不是0元素的数进行输出
                int h=k/(m-2);
                int f=k%(m-2);
                for(int i=0; i

代码二:看到一个题解是   

先输出数,所需数的个数输出完就输出0,第一列与最后一列也是均为0     代码来源

#include 
#include 
#include 
#include 
using namespace std;
int T, n, m, k;
#define maxn 20  
int a[maxn][maxn];
int main(){
    scanf("%d", &T);
    while(T--){
        scanf("%d%d%d", &n, &m, &k); 
        k = (n-2)*(m-2)-k;//此处是关键
        for(int i = 1; i <= n; i++){
            printf("0");
            for(int j = 2; j <= m-1; j++){
                if(k == 0) printf(" 0");
                else printf(" %d", k--);
            }printf(" 0\n");
        }
        
        
    }
    

 

 

你可能感兴趣的:(The 6th Zhejiang Provincial Collegiate Programming Contest)