您的位置:首页 > 其它

Codeforces Hello 2018

2018-01-09 08:46 399 查看

CF913A Modular Exponentiation(模拟)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 1010
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n,m,x;
int main(){
//  freopen("a.in","r",stdin);
n=read();m=read();x=1;bool flag=1;
for(int i=1;i<=n;++i){
x<<=1;if(x>m){flag=0;break;}
}if(flag) printf("%d\n",m%x);
else printf("%d\n",m);
return 0;
}


CF913B Christmas Spruce(树)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 1010
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n;
vector<int>son
;
inline bool dfs(int x){
int res=0;
for(int i=0;i<son[x].size();++i){
int y=son[x][i];
if(!son[y].size()) res++;
else if(!dfs(y)) return 0;
}if(res<3) return 0;return 1;
}
int main(){
//  freopen("a.in","r",stdin);
n=read();
for(int i=2;i<=n;++i){
int x=read();son[x].push_back(i);
}if(dfs(1)) puts("Yes");
else puts("No");
return 0;
}


CF913C Party Lemonade(贪心+dp)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1LL<<60
#define N 35
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n,K,a
,bin
,last;
bool del
;
inline ll dfs(int i){
if(i==-1) return inf;
if(del[i]) return dfs(i-1);
ll res=(ll)K/bin[i]*a[i];K%=bin[i];
if(K) res+=min(dfs(i-1),(ll)a[i]);
return res;
}
int main(){
//  freopen("a.in","r",stdin);
n=read();K=read();bin[0]=1;
for(int i=1;i<=n;++i) bin[i]=bin[i-1]<<1;
for(int i=0;i<n;++i) a[i]=read();
for(int i=0;i<n;++i){
if(del[i]) continue;
for(int j=i+1;j<n;++j){
if(a[j]<=a[i]){del[i]=1;break;}
if(a[j]>=(ll)a[i]*bin[j-i]) del[j]=1;
}
}printf("%I64d\n",dfs(n-1));
return 0;
}


CF913D Too Easy Problems(二分答案+贪心)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 200010
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n,T;
struct data{
int cnt,x,id;
}a
;
inline bool cmp(data x,data y){return x.x<y.x;}
inline bool jud(int x){
int tot=0,t=0;
if(x==0) return 1;
for(int i=1;i<=n;++i){
if(a[i].cnt<x) continue;
t+=a[i].x;if(t>T) return 0;++tot;
if(tot>=x) return 1;
}return 0;
}
int main(){
//  freopen("a.in","r",stdin);
n=read();T=read();
for(int i=1;i<=n;++i) a[i].cnt=read(),a[i].x=read(),a[i].id=i;
sort(a+1,a+n+1,cmp);
int l=0,r=n;
while(l<=r){
int mid=l+r>>1;
if(jud(mid)) l=mid+1;
else r=mid-1;
}int ans=l-1,tot=0;
printf("%d\n%d\n",ans,ans);
if(ans==0) puts("");
else for(int i=1;i<=n;++i){
if(a[i].cnt<l-1) continue;++tot;
printf("%d ",a[i].id);if(tot>=ans){puts("");break;}
}return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: