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;
}