A题:http://codeforces.com/problemset/problem/546/A
没什么好说的,SB题
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<cmath> 6 #include<algorithm> 7 #include<cctype> 8 #include<vector> 9 #include<stack> 10 #include<map> 11 using namespace std; 12 int n,k,w; 13 int main() 14 { 15 while(cin>>k>>n>>w) 16 { 17 int sum; 18 sum=(1+w)*w*k/2; 19 int num; 20 num=sum-n; 21 if(num<=0) 22 cout<<"0"<<endl; 23 else 24 cout<<num<<endl; 25 } 26 return 0; 27 }
B题:http://codeforces.com/problemset/problem/546/B
这题也没啥好说的,赛场上完全应该搞出来的,但是自己作死,不看后来官方给的题目修改的提示,然后一直WA在第六组,后来改了以后又是因为细节问题,一直WA在第21组,经最终修改,终于A了。就是将其排序一下,然后记录每个数最少加多少,才能让数列里面的数各不相同,暴力即可,不过注意的就是记录数组的范围应该是6000,因为后来题目改了,a[i]可以大于n,所以最大就是3000+3000=6000
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<cmath> 6 #include<vector> 7 #include<algorithm> 8 #include<map> 9 #include<stack> 10 using namespace std; 11 const int maxn=6000+10; 12 int a[maxn],n; 13 int vis[maxn]; 14 int main() 15 { 16 while(cin>>n) 17 { 18 memset(vis,0,sizeof(vis)); 19 for(int i=0;i<n;i++) 20 { 21 scanf("%d",&a[i]); 22 vis[a[i]]++; 23 } 24 sort(a,a+n); 25 long long sum=0; 26 for(int i=0;i<n;i++) 27 if(a[i]==a[i+1]) 28 { 29 int j; 30 for(j=1;;j++) 31 { 32 if(vis[a[i]+j]==0) 33 { 34 a[i]=a[i]+j; 35 ++vis[a[i]]; 36 break; 37 } 38 } 39 sum+=j; 40 } 41 cout<<sum<<endl; 42 } 43 return 0; 44 }
时间: 2024-12-21 00:54:16