水題就不用多說了,直接暴力枚舉就完事了。
#include#include #include #include #include #include#include using namespace std;#define LL __int64int main(){ int n,k; while(~scanf("%d%d",&n,&k)) { int m=n; int ans=n; int yu=0; while(m) { m=m+yu; yu=m%k; m=m/k; ans+=m; } cout<
B. Little Dima and Equation也不用說,水題一個(gè),直接枚舉s(x),然后得到x,然后根據(jù)x推出s(x)是不是合適。
當(dāng)時(shí)把81寫成了72,不由的十分悲傷,sad.
#include#include #include #include #include #include#include using namespace std;#define LL __int64#define INF 1000000000vector vec;LL pows(LL x,LL y){ LL ans=1; while(y--)ans=ans*x; return ans;}int dus(LL x){ int ans=0; while(x) { ans=ans+x%10; x=x/10; } return ans;}int main(){ int n,k; int a,b,c; while(~scanf("%d%d%d",&a,&b,&c)) { LL ans=0; vec.clear(); for(int i=1;i<=81;i++) { ans=(LL)b; ans=ans*pows(i,a); ans=ans+(LL)c; if(ans>=INF)break; if(ans<=0)continue; if(dus(ans)==i)vec.push_back(ans); } cout<
二分+貪心。也是一種水題的表現(xiàn)形式。。
二分一下結(jié)果,貪心看當(dāng)前結(jié)果能不能達(dá)到。
#include#include #include #include #include #include#include using namespace std;#define LL __int64#define INF 1000000000#define maxn 220000LL a[maxn];LL b[maxn];LL flag[maxn];LL n,w;LL qiu(LL x){ memset(flag,0,sizeof(flag)); for(LL i=1;i<=n;i++) { b[i]=x-a[i]; } LL ch=0; LL ans=0; for(LL i=1;i<=n;i++) { ch-=flag[i]; b[i]-=ch; if(b[i]<0)b[i]=0; flag[i+w]+=b[i]; ch+=b[i]; ans+=b[i]; } return ans;}int main(){ LL m; while(~scanf("%I64d%I64d%I64d",&n,&m,&w)) { for(LL i=1;i<=n;i++)scanf("%I64d",&a[i]); LL l=0; LL r=1e9; r=r*2; LL mid=(l+r)/2; while(l m)r=mid; else l=mid+1; mid=(l+r)/2; } mid--; cout<
寫這個(gè)題的時(shí)候要多悲劇有多悲劇,竟然在我認(rèn)為最不可能錯(cuò)的地方寫錯(cuò)了。
我很悲傷.
n=r-l+1;
若n<=20,很明顯狀態(tài)壓縮就OK。
若k<=3.
當(dāng)k=1時(shí),很明顯取l。
當(dāng)k=2時(shí),很明顯取兩個(gè)相鄰的,并且只有末位不同的數(shù),他們的異或結(jié)果為1.
當(dāng)k=3時(shí),第一個(gè)數(shù)取l,然后假如結(jié)果為0,算出剩下兩個(gè)數(shù)的最小值。如果兩個(gè)數(shù)最大的
不大于r,那我們就取這三個(gè)數(shù),否則取兩個(gè)數(shù)使得結(jié)果為1.
當(dāng)k>=4時(shí):
對于下面兩個(gè)數(shù)交替處:
..........0111110 k-2
..........0111111 k-1
..........1000000 k
..........1000001 k+1
很明顯我們可以看出來k-2,k-1,k,k+1的異或值為0。
因?yàn)閚>20,我們一定能找出這種k。
#include#include #include #include #include #include#include using namespace std;#define LL __int64#define INF 1000000000#define maxn 220000void dos1(LL l,LL r,LL k){ LL n=r-l+1; LL st=((LL)1)< k)continue; if(res>ans) { res=ans; rst=i; } } len=0; for(LL i=0; i =0; i--) { if((l&(((LL)1)<>i); n=(n<=l&&k+1<=r) { return k; } else if(k-2 r)return dos2(l,k-1,ks); } } return 0;}void dos3(LL l,LL r,LL k){ if(k==1) { cout< =0; i--) { if(l&(((LL)1)< 聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com