本文主要是介绍Educational Codeforces Round 1(远古edu计划),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
A.
高斯求和,如果2次幂小于n就减2次
#include<bits/stdc++.h>
#define INF 1e9
using namespace std;
typedef long long ll;
const int N=2e5+9;
int a[N];
int f[N],vis[N];
ll sn(ll a1,ll an,ll num){return (a1+an)*num/2;}
void init(){f[1]=1;for(int i=2;i<=32;i++){f[i]=f[i-1]*2;}
}
void lan(){ll n;cin>>n;ll ans=0;ans=sn(1,n,n);int pos=1;while(f[pos]<=n){ans-=f[pos]*2;pos++;}cout<<ans<<'\n';}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);init();int q;cin>>q;while(q--){lan();}return 0;
}
B.
知道周期是r-l+1,模拟一下就好了,超过周期mod一下
学到了一个rotate(起始点的前一个,终止点,旋转到这个点的后面,之前的片段删除)
#include<bits/stdc++.h>
#define INF 1e9
using namespace std;
typedef long long ll;
const int N=2e5+9;
char t[N];
string s;
void work(int l,int r,int k){//模拟过程int len=r-l+1;//周期是长度for(int i=l;i<=r;i++){t[(i-l+k)%len]=s[i];//模拟移动超过k回到l自然modlen}for(int i=l;i<=r;i++){s[i]=t[i-l];//转移}return;
}
void lan(){cin>>s;int m;cin>>m;while(m--){int l,r,k;cin>>l>>r>>k;//l从1开始,s从0开始要对应索引work(l-1,r-1,k);// rotate(s.begin()+l-1,s.begin()+r-k,s.begin()+r);}cout<<s<<'\n';
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int q=1;while(q--){lan();}return 0;
}
C.
极角排序,找最小的差值即可
1.atan
#include<bits/stdc++.h>
using namespace std;
typedef long double ld;//防止精度问题
const int N=2e5+9;
const ld pi=acos(-1);//arccos-1==pi,cos(pi)==-1
struct node{int x,y,id;ld ang;//弧度
}a[N];
bool cmp(node a,node b){return a.ang<b.ang;//极角排序
}
ld calc(node x){ld xi=abs(x.x),yi=abs(x.y);if(x.x>=0&&x.y>=0) return atan(xi/yi)*180/pi;//第一象限if(x.x>=0&&x.y<0) return atan(yi/xi)*180/pi+90;//第二象限if(x.x<0&&x.y<0) return atan(xi/yi)*180/pi+180;//第三象限if(x.x<0&&x.y>=0) return atan(yi/xi)*180/pi+270;//第四象限
}
void lan(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i].x>>a[i].y;a[i].id=i;}for(int i=1;i<=n;i++){a[i].ang=calc(a[i]);}sort(a+1,a+1+n,cmp);int pos=n;ld ans=min(a[n].ang-a[1].ang,360-a[n].ang+a[1].ang);for(int i=1;i<=n-1;i++){ld res=min(a[i+1].ang-a[i].ang,360-a[i+1].ang+a[i].ang);if(res<ans){//找差值小的ans=res;pos=i;}}cout<<a[pos].id<<" "<<a[pos%n+1].id<<'\n';
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int q=1;while(q--){lan();}return 0;
}
2.atan2
#include<bits/stdc++.h>
#define INF 1e9
using namespace std;
typedef long double ld;
vector<pair<ld,int> > a;
int n,ansx,ansy;
ld sum=INF;
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int n;cin>>n;for(int i=0;i<n;i++){ld x,y;cin>>x>>y;a.push_back({atan2(y,x),i+1});//辐角}sort(a.begin(),a.end());//排序a.push_back(a[0]);for(int i=0;i<n;i++){ld x=a[i+1].first-a[i].first;if(x<0)x+=2*acos(-1);//加一个周期if(x<sum)sum=x,ansx=a[i].second,ansy=a[i+1].second;//找最小差值}printf("%d %d",ansx,ansy);return 0;
}
这篇关于Educational Codeforces Round 1(远古edu计划)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!