uva669(暴力)
来源:互联网 发布:开淘宝需要营业执照吗 编辑:程序博客网 时间:2024/05/02 04:18
题意:
给出n个空间,标号1到n;
给出k个文件;
每个文件给出要占几个空间,并且给出占的空间有哪些;
现在要我们按顺序,把这些文件排好;
比如三个文件,分别占空间个数4,3,2;
那么第一个文件就要放到空间1,2,3,4,第二个文件放到5,6,7第三个文件放到8,9;
问怎么移动,要求移动最少;
思路;
暴力;
一.把所有能移动到正确位置的部分全都移动到正确位置(就是这个部分放的位置不对,而且它正确的的那个位目前是空的)
二.已经没有办法移了,然后随便拿一个位置放错的,放到一个空位(这样肯定就可以继续移了),然后继续执行上面的第一步;
知道正确为止;
如果一开始就正确;输出No optimization needed
#include<cstdio>#include<cstring>const int N = 10005;int clus[N], cnt, n, k, make;void solve() {int c = 0;while(1) {int cc = c;for(int i = 1; i <= n;i++) {if(clus[i] != i && clus[i] != 0 && clus[clus[i]] == 0) {c++;printf("%d %d\n",i,clus[i]);clus[clus[i]] = clus[i];clus[i] = 0;}}if(c == make)break;if(cc == c) {bool f = 0;for(int i = 1; i <= n; i++) {if(clus[i] != i && clus[i] != 0) {for(int j = 1; j <= n ;j++) {if(clus[j] == 0) {printf("%d %d\n",i,j);clus[j] = clus[i];clus[i] = 0;f = 1;break;}}}if(f)break;}}}}int main() {int t;scanf("%d",&t);while(t--) {memset(clus, 0, sizeof(clus));make = 0;scanf("%d%d",&n,&k);cnt = 1;for(int i = 1; i <= k; i++) {int c;scanf("%d",&c);int tmp;for(int i = 0; i < c;i++) {scanf("%d",&tmp);clus[tmp] = cnt++;if(tmp != cnt - 1)make++;}}if(make == 0)printf("No optimization needed\n");solve();if(t)printf("\n");}}
0 0
- uva669(暴力)
- 暴力??
- 暴力
- 暴力
- 暴力
- 暴力
- 暴力
- CSU 1538 暴力暴力暴力
- hdu6152暴力暴力!!!
- 很黄很暴力
- 《暴力街区》
- 暴力关机
- 暴力破解
- 暴力反射
- zoj4710暴力
- HDU4737(暴力)
- 冷暴力
- 暴力uva10273
- response的setCharacterEncoding
- [ERROR] Unable to read and import the source file : 'C:\Users\Administrator\.hudson\jobs\Deeplan\wor
- rest接口 post与get提交的区别
- centos 6.6 下安装sailalign
- LeetCode 203-Remove Linked List Elements
- uva669(暴力)
- Java整数占几个字节,以及负数的二进制表示方法,以及Java的逻辑运算符>>和>>>的区别
- ATS cache中的几个数据结构图收集
- 配置Sublime Text 2
- 设计模式_结构型模式_装饰模式
- Futurice公司Android开发者总结的经验教训
- 诸葛io:用户数据研究的四大误区
- hdoj 1800 Flying to the Mars 【动态规划】
- 虚幻4制作自己的文件格式