UVA 10736 ,400

10736 :配对做法,调换过来还是原来的对,所以用数组的值与数组的下标来对应,省了二维空间的量和时间,还方便
具体思路:原数组是下标和值相等,现在输入一对一对的数,然后进行交换,如果能交流的话,那就是换了2,4,6。。。几次,最终都能换回来,如果不行,那就换不回来了,也就没法成功。

#include<iostream>
using namespace std;
int line[500010];
void init(int m)
{
    for(int i = 0; i < m; i++)
        line[i] = i;
}
void swap(int a, int b)
{
    int t = line[a];
     line[a] = line[b];
     line[b] = t;
}
int isOk(int n)
{
    int i;
    for(i = 0; i < n; i++)
    {
        if(line[i] != i) break;
    }
    if(i != n) return 0;
    else       return 1;
}
int main()
{
    int n;
    while(cin >> n)
    {
        if(n == 0) break;
        init(n);
        int i, a, b;
        for(i = 0; i < n; i++)
            {
                cin >> a >> b;
                swap(a, b);
            }
        if(isOk(n)== 0) cout << "NO" << endl;
        else            cout << "YES" << endl;
    }
    return 0;
}

一段错误代码:

/* Do you know where you are wrong?
一组数据治的服服的: 1 2, 2 3, 3 4, 4 1;~~~~~~没话了吧*/

#include<iostream>
#include<algorithm>
using namespace std;
int line1[500010];
int line2[500010];

int main()
{
    int n;
    while(cin >> n)
    {
        if(n == 0) break;
        int i;
        for(i = 0; i < n; i++)
        {
            cin >> line1[i];
            cin >> line2[i];
            //if(line1[i] == line2[i])
            //    break;
        }
        sort(line1, line1+n);
        sort(line2, line2+n);
        int flag = 0, j;
        for(int m = 0; m < i; m++)
            cout << line1[m] << " " << line2[m] << endl;
        for(j = 0; j < i; j++)
        {
            if(line1[j] != line2[j])
            {
               // flag = 1;
                break;
            }

        }
        if(j == i) cout << "Yes" << endl;
        else       cout << "No" << endl;
    }
    return 0;
}

400:
大体思路:
排序,按顺序输出,
值得注意的就是,要在一行的总字符数不超过60的情况下让列最少,列不等式呗,再有需要注意的一点就是,最后输出的时候要注意下标的计算,嗯,。。。以后要多用二目运算符了!!!

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
string name[110];
void print(const string& s, int len, char extra)
{
    cout << s;
    for(int i = 0; i < len - s.length(); i++)
        cout << extra;

}

int main()
{
    int n;
    while(cin >> n)
    {
        int i = 0, m = 0;
        for(i = 0; i < n; i++)
        {
            cin >> name[i];
            m = max(m, (int)name[i].length()); // STL ÄÚº¯Êý
        }
        int line, column;
        column = ((60-m) / (m+2)) + 1;
        line = i / column;
        if(i % column != 0)
            line = line + 1;
        else
            line = line;
        print("", 60, '-');
        cout << endl;
        sort(name , name+n);
        for(int r = 0; r < line; r++)
        {
            for(int j = 0; j < column; j++)
            {
                int idx = j * line + r;
                if(idx < n) print(name[idx], j == column - 1? m : m+2, ' ');

            }
            cout << endl;
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值