题目链接 A. Currency System in Geraldion
有1时,所有大于等于1的数都可由1组成。没有1时,最小不幸的数就是1.
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 void solve(){ 6 int n,x; 7 scanf("%d",&n); 8 int flag = 0; 9 for(int i = 1; i<=n; i++){ 10 scanf("%d",&x); 11 if(x == 1) flag = 1; 12 } 13 if(flag) printf("-1\n"); 14 else printf("1\n"); 15 } 16 int main() 17 { 18 solve(); 19 return 0; 20 }
神之队友,八个if条件秒A,orz...
最后给的两个矩形每个长和宽翻过来倒过去,有四种情况。再和给的第一个矩形匹配总共有八种情况。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 void solve(){ 6 int a1,b1,a2,b2,a3,b3; 7 cin>>a1>>b1>>a2>>b2>>a3>>b3; 8 int flag = 0; 9 if(a2+a3<=a1 && max(b2,b3)<=b1) flag = 1; 10 if(a2+a3<=b1 && max(b2,b3)<=a1) flag = 1; 11 if(a2+b3<=a1 && max(b2,a3)<=b1) flag = 1; 12 if(a2+b3<=b1 && max(b2,a3)<=a1) flag = 1; 13 if(b2+a3<=a1 && max(a2,b3)<=b1) flag = 1; 14 if(b2+a3<=b1 && max(a2,b3)<=a1) flag = 1; 15 if(b2+b3<=a1 && max(a2,a3)<=b1) flag = 1; 16 if(b2+b3<=b1 && max(a2,a3)<=a1) flag = 1; 17 if(flag) printf("YES\n"); 18 else printf("NO\n"); 19 } 20 int main() 21 { 22 solve(); 23 return 0; 24 }
题意:给定每一个字母出现的个数ai,组成一个最长的字母串.
此字母串满足的条件:
1.其中的每个字母出现的总次数不超过ai.
2.每个字母出现的次数必须是不同的。
题解:这个题直接贪心。 从最大值开始,拿第一组样例,2 5 5来说
排序后2 5 5,从最后5开始,找局部最优解。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 int a[30]; 6 void solve(){ 7 int n; 8 scanf("%d",&n); 9 for(int i = 0; i<n; i++) scanf("%d",&a[i]); 10 sort(a,a+n); 11 int maxn = 1e9+7; 12 long long sum = 0; 13 for(int i = n-1; i>=0; i--){ 14 if(maxn == 0) break; 15 if(maxn>=a[i]){ 16 sum += a[i]; 17 maxn = a[i] - 1; 18 } 19 else{ 20 sum += maxn; 21 maxn--; 22 } 23 } 24 printf("%I64d\n",sum); 25 } 26 int main() 27 { 28 solve(); 29 return 0; 30 }
记得寒假做过这道水题,我发现我一见到做过的题就懵了。。。
就把第一个人票数一直和后面最大的比较,如果此人最大的小于后面最大的,他就再得一票,后面最大的那个就减一票,ans+1,排序,直到后面没有比它还大的。数据较小,不会超时,至于司老大说的二分法我还没有领会。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 int a[105]; 6 void solve(){ 7 int n,ans = 0; 8 scanf("%d",&n); 9 for(int i = 0; i<n; i++) scanf("%d",&a[i]); 10 while(1){ 11 sort(a+1,a+n); 12 if(a[n-1]<a[0]) break; 13 a[n-1]--; 14 a[0]++; 15 ans++; 16 } 17 printf("%d\n",ans); 18 } 19 int main() 20 { 21 solve(); 22 return 0; 23 }
时间: 2024-11-09 08:42:29