下午打了一場練習賽,從做d題來看讀題不認真,複雜**實現起來還是太慢。e題我的思路並不夠靈活。一直糾結於de兩題,其實f題和h題都應該做出來的。 還有英語qaq。
整理下今天的練習賽。
zoj—3939
題意:當周一是在乙個月的1,11,21日時被稱為幸運日。給出乙個日期是第乙個幸運日,求第k個幸運日的日期。
因為資料量k<=1e9,所以必定是打表找規律。
這個題打下表就能發現400年一迴圈的規律。
**來自:
typedef long long ll;
struct point
};
point a[10000];
int n;
int cnt;
int d1[13] = ;
int d2[13] = ;
bool check(int x)
void init()
day += 7;
} day -= tmp;
} }
} int main()
//printf("y = %d mid = %d tmp = %d\n", y, mid, tmp);
ll t1 = 0, t2 = 0, t3 = 0;
for (int i = 1; i <= cnt; i++)
t1 = (ll)a[g].year + (ll)(mid + ind) * 400;
t2 = (ll)a[g].month;
t3 = (ll)a[g].day;
break;
} }
printf("%lld %lld %lld\n", t1, t2, t3);
} return 0;
}
zoj3940—modulo query
題意:f(1, x) = x mod a1.
f(i, x) = f(i - 1, x) mod ai (2 ≤i≤n)
求f(n,x)=y,給出y,求有多少個x(x<=m)滿足f(n,x)=y。
其實這道題就是求((x mod a1)mod a2)...)mod an=y。求x有多少個x(x<=m)滿足條件。
這道題思路絕對是腦洞清奇。開拓思路。就是0到m這每個區間進行疊加,比如(1,m)的區間上所有數對a1取模,所得數必定在(0,a1-1)之間,下面可以快速算出大約有多少個區間變成了(0,a1-1),繼續依次取模a2...。
這是官方題解:
可以觀察到乙個區間對乙個數取模後的結果也可以用區間來表示,並且這些區間的左端點都是0。於是直接用乙個map存每次取模之後的區間和這個區間出現次數,要取模的時候,找出所有右端點大於等於當前模數的所有區間,暴力算一下結果即可。對於查詢,二分下位置,求個字尾和就好了。下面分析下複雜度為什麼是對的。
眾所周知:乙個數對一堆數取模,最多會有\log
log次值的改變。對於這題每對乙個新數取模,最多隻會增加乙個區間。考慮當前區間是[0,v_i][0
,vi
],要對x
x取模,那麼對於v_i < xv
i<
x的區間沒有變化,對於v_i \ge xv
i≥
x的那些區間會變成[0,v_i \text x][0
,vi
mo
dx],並且可能會新增區間[0,x-1][0
,x−1
]。這個過程其實相當於每個a_ia
i對後面所有數依次取模,那麼總共會有o(n \log n)o(
nlogn)
次值的改變,每次改變需要在map上修改一下,總複雜度是o(n\log^2n)o(
nlog2
n)
的。
**:#define maxn 500005
const int mod = 1e9+7;
int sum[maxn];
int ans[maxn];
struct node// 區間[0, right]以及該區間出現的次數cnt
bool operator<(const node &a) const
}tp[100005];
int main()
} int cnt = 1;
while(!que.empty()) //將最後得到的所有區間存在乙個陣列中
sort(tp+1,tp+cnt); //將各個區間進行從小到大排序
memset(sum, 0, sizeof sum); //初始化為0
for(int i = 1; i < cnt; i++)
int q;
cin>>q;
long long out=0;
for(int i=1;i<=q;i++)
cout題意:給出k是持續興奮的天數,給出若干個區間作為可以選擇的開始點,求怎麼樣選可以興奮總天數最多。
思路1:先合併區間,從第乙個區間的第乙個點開始放,放1,k+1,,當下乙個點放的區間右端在區間中不用管,繼續向後放。如果不在,記錄一下如果放可以得到多少。放完以後如果還有剩餘在把儲存的依次大到小拿出來。
思路2:當遇見右端點不在區間中時,dfs兩個方向,放前乙個的,放後乙個的左端。
推薦部落格:
zoj—3944
就是大暴力,暴力找該點不是「.」的就消一下周圍滿足條件的。
ACM訓練日記 8月4日
今天雖然只a了三個題,但感覺也算是扎扎實實的三道題,分別是數獨,塗顏色,分兩組。數獨這道題很明顯是深搜,9 9的方格填滿數,使得橫排,豎排,和9個3 3的小方塊只有1到9不重複的九個數,該題的關鍵就是做好數字使用過的標記,要做三個vis i j 然後就只需要吧空著的方塊填入判斷填數字,遞迴到填滿為止...
ACM訓練日記 8月8日
經過今天的訓練,還真有點累,主要因為是下午的訓練賽,前兩道題特別的簡單,可到了第三題就直接麼懵了,最鬱悶的是賽後看題解還完全看不懂,是線性dp的問題,看了好幾篇部落格,還是半懂,甚至開始懷疑自己動態規劃怎麼學的,明天還是先了解下線性dp的事再看這道題吧。另外利用上午和晚上的時間,勉強a了三道題。第一...
ACM訓練日記 8月17日
今天除了上午繼續看樹狀陣列課件以外,下午進行了第一次團體訓練,雖然成績不怎麼理想,從中也找到自己許多的不足。做第一道題時其實就有些困難,雖然我們是第乙個做出來的,給了幾頭牛的重量與強壯度,要求把這些牛摞起來,每頭牛的風險是該頭牛上面的牛的重量相加減該牛的強壯度,求怎麼摞起來使最大風險最低,這道題很明...