标签:比较 实现 cin turn int 不用 logs set rtm
暴力枚举 无思维难度 无坑点
1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 int n,Mi,Mj; 5 double Max,now; 6 int main(){ 7 scanf("%d",&n); 8 for(int i=1;i<n;i++){ 9 for(int j=1;j<i;j++){ 10 //printf("%d %d gcd:%d\n",i,j,__gcd(i,j)); 11 if(i+j==n && __gcd(i,j)==1){ 12 double x=i; 13 double y=j; 14 now = y/x; 15 //printf("%.2f\n",now); 16 if(now>Max){ 17 Max = now; 18 Mi = i; 19 Mj = j; 20 } 21 } 22 } 23 } 24 printf("%d %d\n",Mj,Mi); 25 return 0; 26 }
手写几组数据就能发现这是一个结论题目,特判一下特殊情况就OK了。
1 #include <cstdio> 2 #include <iostream> 3 typedef long long ll; 4 ll n,k; 5 int main(){ 6 std::cin>>n>>k; 7 if(n==1){ 8 printf("0 0"); 9 return 0; 10 } 11 if(n==k){ 12 printf("0 0"); 13 return 0; 14 } 15 if(k==0){ 16 printf("0 0"); 17 return 0; 18 } 19 printf("1 "); 20 if(2*k<=n-k){ 21 std::cout<<2*k; 22 } 23 else std::cout<<n-k; 24 return 0; 25 }
比赛时始终没有想到这个算法怎么实现。。。赛后看了下题解,发现还是自己too young
贪心思路:每一秒走能走的最贵的飞机
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 struct p 5 { 6 ll x,y; 7 p(ll x=0,ll y=0):x(x),y(y){} 8 bool operator <(const p&t)const 9 { 10 if (x==t.x) return y<t.y; 11 return x>t.x; 12 } 13 }; 14 p a[300005]; 15 p b[300005]; 16 int num[300005]; 17 bool use[300005]; 18 int main() 19 { 20 ios::sync_with_stdio(false); 21 ll n,k; 22 cin>>n>>k; 23 for(int i=1;i<=n;i++) 24 { 25 cin>>a[i].x; 26 a[i].y=i; 27 } 28 //排序 29 sort(a+1,a+1+n); 30 ll ans=0; 31 int now=1; 32 memset(use,0,sizeof(use)); 33 for(int i=1;i<=n;i++) 34 if (!use[i]) 35 { 36 //如果当前有和y一样的次序 就不用加和 37 while(a[now].y>i+k) 38 { 39 num[a[now].y]=a[now].y; 40 use[a[now].y-k]=1; 41 now++; 42 } 43 //对于当前比较大的 我尽量让差值尽量下就行了,因为i+k是递增的,所以当前值一定是最优的 44 if (i+k>=a[now].y) 45 { 46 num[a[now].y]=i+k; 47 ans+=a[now].x*(i+k-a[now].y); 48 use[i]=1; 49 now++; 50 } 51 } 52 cout<<ans<<endl; 53 for(int i=1;i<n;i++) 54 cout<<num[i]<<" "; 55 cout<<num[n]<<endl; 56 return 0; 57 }
待补
思路:容斥原理+可持久化线段树
可持久化线段树不会写Orz 继续留坑
标签:比较 实现 cin turn int 不用 logs set rtm
原文地址:http://www.cnblogs.com/OIerLYF/p/7496058.html