codeforces——贪心
codeforces 804A Find Amir http://codeforces.com/problemset/problem/804/A
/* 题意:给定n个学校,需要遍历所有学校,可从任意一点开始. i到j有(i+j) mod (n+1) 的花费,求最小花费。 考虑贪心:先走和为n+1的两处,走完后最小只能再走到和为n+1的学校,再走到和为n的 例如: 1 2 3 4 5 6 7 8 9 10 先走1->10 花费为0 再走10->2 花费为1 再走2->9 花费为0 ... 最后答案,如果n是奇数,就是n/2 否则就是n/2-1. */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,ans; int main() { scanf("%d",&n); if(n%2==1) printf("%d\n",n/2); else printf("%d\n",n/2-1); return 0; }
codeforces 803A Maximal Binary Matrix http://codeforces.com/problemset/problem/803/A
/* 题意:给你一个n*n的矩阵,让你往里面填1,使得这个矩阵对称 然后输出这个矩阵字典序最大的那个矩阵 如果无法完成就输出-1,矩阵字典序就是每行都进行字典序比较 贪心.首先k>n*N肯定是输出-1,剩下的,由于是要输出字典序最大的, 那么肯定是尽可能把每一行都填满,但是要对称着填,对角线上消耗一个1,其余地方消耗两个1 */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 101 using namespace std; int a[maxn][maxn]; int n,k,cnt,ans; int main() { scanf("%d%d",&n,&k); if(k>n*n) { puts("-1"); return 0; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(a[i][j])continue; if(i==j&&k) { k--; a[i][j]=1; } else if(k>=2) { k-=2; a[i][j]=a[j][i]=1; } } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { printf("%d ",a[i][j]); if(j==n) printf("\n"); } return 0; }
折花枝,恨花枝,准拟花开人共卮,开时人去时。
怕相思,已相思,轮到相思没处辞,眉间露一丝。