A. Number of Apartments
题意:求方程的解
思路:直接模拟就行
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int main(){ int t; scanf("%d",&t); while(t--){ int num; int n; scanf("%d",&n); int flag=0; int a,b,c; for(int i=0;i<=n/7;i++){ int rest=n-i*7; a=i; for(int j=0;j<=rest/5;j++){ int r=rest-j*5; // printf("%d %d %d\n",i,j,r); if(r%3==0){ flag=1; b=j; c=r/3; break; } } if(flag==1){ printf("%d %d %d\n",c,b,a); break; } } if(flag==0){ printf("-1\n"); } } }
B. Barrels
题意:问经过k次倒水,最多的水和最少的水容量相差多少,并且使这个值最大,则此时这个值是多少
思路:存入数组然后排序,从后往前加和,再减第一个最小的,(有可能n-1=k,那最小的就是0)
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxx=2e5+10; int main(){ int t; scanf("%d",&t); while(t--){ int n,k,kk; scanf("%d %d",&n,&k); kk=k; int a[maxx]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n); long long int sum=a[n-1]; for(int i=n-2;i>=0;i--){ if(k>0){ sum+=a[i]; k--; } } if(kk=n-1){ printf("%lld\n",sum); }else{ printf("%%lld\n",sum-a[0]); } } }
C. Numbers on Whiteboard
题意:就是从1-n,每次操作就是找出两个数进行删除,并且增加个(a+b)/2,问经过n-1次操作,剩下的最后一个数最小是多少
思路:看代码输出,其实a和a-2进行一次操作就是-1
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxx=2e5+10; int main(){// 1 2 3 4 5 6 int t; scanf("%d",&t); while(t--){ int n; scanf("%d",&n); int a=n,b=n-1; int j=1; printf("2\n"); printf("%d %d\n",a,b); b--; while(b!=0){ printf("%d %d\n",a,b); a--; b--; } } }
Educational Codeforces Round 96 (Rated for Div. 2)
原文:https://www.cnblogs.com/bonel/p/14767978.html